You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/08/29 15:32:51 UTC

[01/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 3ddf00778 -> 66fcd0fa3


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index 4d08f6f..34bc830 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -1471,2010 +1471,2015 @@
 <span class="sourceLineNo">1463</span>        this, this.regionServerAccounting);<a name="line.1463"></a>
 <span class="sourceLineNo">1464</span>    if (this.hMemManager != null) {<a name="line.1464"></a>
 <span class="sourceLineNo">1465</span>      this.hMemManager.start(getChoreService());<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    }<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>  }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper,<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      getMyEphemeralNodePath(), data);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>  }<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span><a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  @Override<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    return regionServerAccounting;<a name="line.1484"></a>
+<span class="sourceLineNo">1466</span>      MemStoreChunkPool chunkPool = MemStoreChunkPool.getPool(this.conf);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      if (chunkPool != null) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>        // Register it as HeapMemoryTuneObserver<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>        this.hMemManager.registerTuneObserver(chunkPool);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      }<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>    }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span><a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper,<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      getMyEphemeralNodePath(), data);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>  }<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span><a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1484"></a>
 <span class="sourceLineNo">1485</span>  }<a name="line.1485"></a>
 <span class="sourceLineNo">1486</span><a name="line.1486"></a>
 <span class="sourceLineNo">1487</span>  @Override<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>  public TableLockManager getTableLockManager() {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    return tableLockManager;<a name="line.1489"></a>
+<span class="sourceLineNo">1488</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    return regionServerAccounting;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>  }<a name="line.1490"></a>
 <span class="sourceLineNo">1491</span><a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>  /*<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   * @param r Region to get RegionLoad for.<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   * @return RegionLoad instance.<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   * @throws IOException<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private RegionLoad createRegionLoad(final Region r, RegionLoad.Builder regionLoadBldr,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    int stores = 0;<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>    int storefiles = 0;<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    int storeUncompressedSizeMB = 0;<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    int storefileSizeMB = 0;<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    int memstoreSizeMB = (int) (r.getMemstoreSize() / 1024 / 1024);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    int storefileIndexSizeMB = 0;<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    int rootIndexSizeKB = 0;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    int totalStaticIndexSizeKB = 0;<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    int totalStaticBloomSizeKB = 0;<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    long totalCompactingKVs = 0;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    long currentCompactedKVs = 0;<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    List&lt;Store&gt; storeList = r.getStores();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    stores += storeList.size();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    for (Store store : storeList) {<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      storefiles += store.getStorefilesCount();<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      storefileIndexSizeMB += (int) (store.getStorefilesIndexSize() / 1024 / 1024);<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      if (progress != null) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        totalCompactingKVs += progress.totalCompactingKVs;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      rootIndexSizeKB += (int) (store.getStorefilesIndexSize() / 1024);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    if (regionLoadBldr == null) {<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    }<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    if (regionSpecifier == null) {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    regionSpecifier.setValue(ByteStringer.wrap(name));<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      .setStores(stores)<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      .setStorefiles(storefiles)<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      .setMemstoreSizeMB(memstoreSizeMB)<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      .setStorefileIndexSizeMB(storefileIndexSizeMB)<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>      .setRootIndexSizeKB(rootIndexSizeKB)<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      .setDataLocality(dataLocality)<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    ((HRegion)r).setCompleteSequenceId(regionLoadBldr);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span><a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    return regionLoadBldr.build();<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>  }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span><a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  /**<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>   * @param encodedRegionName<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>   * @return An instance of RegionLoad.<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>   */<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    Region r = onlineRegions.get(encodedRegionName);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  /*<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>   */<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>    private final HRegionServer instance;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    private final int majorCompactPriority;<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    private long iteration = 0;<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span><a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    CompactionChecker(final HRegionServer h, final int sleepTime,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>        final Stoppable stopper) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.instance = h;<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      LOG.info(this.getName() + " runs every " + StringUtils.formatTime(sleepTime));<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span><a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      /* MajorCompactPriority is configurable.<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>       * If not set, the compaction will use default priority.<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>       */<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        DEFAULT_PRIORITY);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    }<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span><a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    @Override<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    protected void chore() {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        if (r == null)<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          continue;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        for (Store s : r.getStores()) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>          try {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>            assert multiplier &gt; 0;<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>            if (iteration % multiplier != 0) continue;<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>            if (s.needsCompaction()) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>              this.instance.compactSplitThread.requestSystemCompaction(r, s, getName()<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>                  + " requests compaction");<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>            } else if (s.isMajorCompaction()) {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>              if (majorCompactPriority == DEFAULT_PRIORITY<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>                  || majorCompactPriority &gt; ((HRegion)r).getCompactPriority()) {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>                    + " requests major compaction; use default priority", null);<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>              } else {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>                    + " requests major compaction; use configured priority",<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>                  this.majorCompactPriority, null, null);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>              }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>            }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>          } catch (IOException e) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>            LOG.warn("Failed major compaction check on " + r, e);<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>      }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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><a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  static class PeriodicMemstoreFlusher extends ScheduledChore {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    final HRegionServer server;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      this.server = server;<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    }<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span><a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    @Override<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    protected void chore() {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      final StringBuffer whyFlush = new StringBuffer();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      for (Region r : this.server.onlineRegions.values()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        if (r == null) continue;<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        if (((HRegion)r).shouldFlush(whyFlush)) {<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>          if (requester != null) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>            long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>            LOG.info(getName() + " requesting flush of " +<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>              r.getRegionInfo().getRegionNameAsString() + " because " +<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>              whyFlush.toString() +<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>              " after random delay " + randomDelay + "ms");<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>            requester.requestDelayedFlush(r, randomDelay, false);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>          }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>        }<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  /**<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>   * completed (setting up filesystem, starting service threads, etc.). This<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>   * method is designed mostly to be useful in tests.<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>   *<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>   * @return true if online, false if not.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   */<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>  public boolean isOnline() {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>    return online.get();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>  }<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span><a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /**<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>   * Setup WAL log and replication if enabled.<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>   * Replication setup is done in here because it wants to be hooked up to WAL.<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>   * @return A WAL instance.<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>   * @throws IOException<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>   */<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  private WALFactory setupWALAndReplication() throws IOException {<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    final Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    final String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span><a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    Path logdir = new Path(rootDir, logName);<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    if (LOG.isDebugEnabled()) LOG.debug("logdir=" + logdir);<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    if (this.fs.exists(logdir)) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      throw new RegionServerRunningException("Region server has already " +<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>        "created directory at " + this.serverName.toString());<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    }<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span><a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    // Instantiate replication manager if replication enabled.  Pass it the<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    // log directories.<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>    createNewReplicationInstance(conf, this, this.fs, logdir, oldLogDir);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span><a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    // listeners the wal factory will add to wals it creates.<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    final List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;WALActionsListener&gt;();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    listeners.add(new MetricsWAL());<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        this.replicationSourceHandler.getWALActionsListener() != null) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      // Replication handler is an implementation of WALActionsListener.<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      listeners.add(this.replicationSourceHandler.getWALActionsListener());<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>    }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>    return new WALFactory(conf, listeners, serverName.toString());<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span><a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  /**<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>   * We initialize the roller for the wal that handles meta lazily<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>   * since we don't know if this regionserver will handle it. All calls to<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>   * this method return a reference to the that same roller. As newly referenced<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>   * meta regions are brought online, they will be offered to the roller for maintenance.<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>   * As a part of that registration process, the roller will add itself as a<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>   * listener on the wal.<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>   */<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>  protected LogRoller ensureMetaWALRoller() {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // Using a tmp log roller to ensure metaLogRoller is alive once it is not<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // null<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    LogRoller roller = metawalRoller.get();<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    if (null == roller) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>      LogRoller tmpLogRoller = new LogRoller(this, this);<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      String n = Thread.currentThread().getName();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      Threads.setDaemonThreadRunning(tmpLogRoller.getThread(),<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>          n + "-MetaLogRoller", uncaughtExceptionHandler);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      if (metawalRoller.compareAndSet(null, tmpLogRoller)) {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        roller = tmpLogRoller;<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      } else {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>        // Another thread won starting the roller<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>        Threads.shutdown(tmpLogRoller.getThread());<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        roller = metawalRoller.get();<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      }<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    return roller;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public MetricsRegionServer getRegionServerMetrics() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return this.metricsRegionServer;<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * @return Master address tracker instance.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    return this.masterAddressTracker;<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>  /*<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>   * hosting server. Worker logs the exception and exits.<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>   */<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  private void startServiceThreads() throws IOException {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    // Start executor services<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      this.service.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    }<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    this.service.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>       "hbase.regionserver.wal.max.splitters", SplitLogWorkerCoordination.DEFAULT_MAX_SPLITTERS));<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    // Start the threads for compacted files discharger<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    this.service.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      this.service.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    Threads.setDaemonThreadRunning(this.walRoller.getThread(), getName() + ".logRoller",<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>        uncaughtExceptionHandler);<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    if (this.compactionChecker != null) choreService.scheduleChore(compactionChecker);<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    if (this.periodicFlusher != null) choreService.scheduleChore(periodicFlusher);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    if (this.healthCheckChore != null) choreService.scheduleChore(healthCheckChore);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    if (this.nonceManagerChore != null) choreService.scheduleChore(nonceManagerChore);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    if (this.storefileRefresher != null) choreService.scheduleChore(storefileRefresher);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    if (this.movedRegionsCleaner != null) choreService.scheduleChore(movedRegionsCleaner);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    // an unhandled exception, it will just exit.<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    Threads.setDaemonThreadRunning(this.leases.getThread(), getName() + ".leaseChecker",<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      uncaughtExceptionHandler);<a name="line.1798"></a>
+<span class="sourceLineNo">1492</span>  @Override<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  public TableLockManager getTableLockManager() {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    return tableLockManager;<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>  /*<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>   * @param r Region to get RegionLoad for.<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>   * @return RegionLoad instance.<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>   *<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   * @throws IOException<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   */<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>  private RegionLoad createRegionLoad(final Region r, RegionLoad.Builder regionLoadBldr,<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    int stores = 0;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>    int storefiles = 0;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    int storeUncompressedSizeMB = 0;<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    int storefileSizeMB = 0;<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    int memstoreSizeMB = (int) (r.getMemstoreSize() / 1024 / 1024);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    int storefileIndexSizeMB = 0;<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    int rootIndexSizeKB = 0;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    int totalStaticIndexSizeKB = 0;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    int totalStaticBloomSizeKB = 0;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    long totalCompactingKVs = 0;<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    long currentCompactedKVs = 0;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    List&lt;Store&gt; storeList = r.getStores();<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    stores += storeList.size();<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    for (Store store : storeList) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      storefiles += store.getStorefilesCount();<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      storefileIndexSizeMB += (int) (store.getStorefilesIndexSize() / 1024 / 1024);<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      if (progress != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        totalCompactingKVs += progress.totalCompactingKVs;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>      }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      rootIndexSizeKB += (int) (store.getStorefilesIndexSize() / 1024);<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    if (regionLoadBldr == null) {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    }<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    if (regionSpecifier == null) {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>    }<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    regionSpecifier.setValue(ByteStringer.wrap(name));<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      .setStores(stores)<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      .setStorefiles(storefiles)<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>      .setMemstoreSizeMB(memstoreSizeMB)<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      .setStorefileIndexSizeMB(storefileIndexSizeMB)<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      .setRootIndexSizeKB(rootIndexSizeKB)<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>      .setDataLocality(dataLocality)<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    ((HRegion)r).setCompleteSequenceId(regionLoadBldr);<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    return regionLoadBldr.build();<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  }<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span><a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  /**<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>   * @param encodedRegionName<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>   * @return An instance of RegionLoad.<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>   */<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    Region r = onlineRegions.get(encodedRegionName);<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>  /*<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>   */<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    private final HRegionServer instance;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>    private final int majorCompactPriority;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    private long iteration = 0;<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    CompactionChecker(final HRegionServer h, final int sleepTime,<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>        final Stoppable stopper) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      this.instance = h;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      LOG.info(this.getName() + " runs every " + StringUtils.formatTime(sleepTime));<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      /* MajorCompactPriority is configurable.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>       * If not set, the compaction will use default priority.<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>       */<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>        getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        DEFAULT_PRIORITY);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    }<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    @Override<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    protected void chore() {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>        if (r == null)<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>          continue;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (Store s : r.getStores()) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          try {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>            assert multiplier &gt; 0;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>            if (iteration % multiplier != 0) continue;<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>            if (s.needsCompaction()) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>              this.instance.compactSplitThread.requestSystemCompaction(r, s, getName()<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>                  + " requests compaction");<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>            } else if (s.isMajorCompaction()) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>              if (majorCompactPriority == DEFAULT_PRIORITY<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>                  || majorCompactPriority &gt; ((HRegion)r).getCompactPriority()) {<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>                    + " requests major compaction; use default priority", null);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>              } else {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>                    + " requests major compaction; use configured priority",<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>                  this.majorCompactPriority, null, null);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>              }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>            }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>          } catch (IOException e) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>          }<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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><a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>  static class PeriodicMemstoreFlusher extends ScheduledChore {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    final HRegionServer server;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>    final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      this.server = server;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span><a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    @Override<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    protected void chore() {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      final StringBuffer whyFlush = new StringBuffer();<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      for (Region r : this.server.onlineRegions.values()) {<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        if (r == null) continue;<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>        if (((HRegion)r).shouldFlush(whyFlush)) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          if (requester != null) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>            long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME;<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>            LOG.info(getName() + " requesting flush of " +<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>              r.getRegionInfo().getRegionNameAsString() + " because " +<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>              whyFlush.toString() +<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>              " after random delay " + randomDelay + "ms");<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>            requester.requestDelayedFlush(r, randomDelay, false);<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>          }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>        }<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      }<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>   * completed (setting up filesystem, starting service threads, etc.). This<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>   * method is designed mostly to be useful in tests.<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   *<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   * @return true if online, false if not.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>   */<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>  public boolean isOnline() {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    return online.get();<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span><a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  /**<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>   * Setup WAL log and replication if enabled.<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>   * Replication setup is done in here because it wants to be hooked up to WAL.<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @return A WAL instance.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @throws IOException<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>  private WALFactory setupWALAndReplication() throws IOException {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    final Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>    final String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    Path logdir = new Path(rootDir, logName);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    if (LOG.isDebugEnabled()) LOG.debug("logdir=" + logdir);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    if (this.fs.exists(logdir)) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      throw new RegionServerRunningException("Region server has already " +<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>        "created directory at " + this.serverName.toString());<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span><a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    // Instantiate replication manager if replication enabled.  Pass it the<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    // log directories.<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    createNewReplicationInstance(conf, this, this.fs, logdir, oldLogDir);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span><a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    // listeners the wal factory will add to wals it creates.<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    final List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;WALActionsListener&gt;();<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    listeners.add(new MetricsWAL());<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>        this.replicationSourceHandler.getWALActionsListener() != null) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      // Replication handler is an implementation of WALActionsListener.<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      listeners.add(this.replicationSourceHandler.getWALActionsListener());<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    }<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span><a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    return new WALFactory(conf, listeners, serverName.toString());<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  /**<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>   * We initialize the roller for the wal that handles meta lazily<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>   * since we don't know if this regionserver will handle it. All calls to<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>   * this method return a reference to the that same roller. As newly referenced<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>   * meta regions are brought online, they will be offered to the roller for maintenance.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>   * As a part of that registration process, the roller will add itself as a<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>   * listener on the wal.<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>   */<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>  protected LogRoller ensureMetaWALRoller() {<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // Using a tmp log roller to ensure metaLogRoller is alive once it is not<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    // null<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    LogRoller roller = metawalRoller.get();<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    if (null == roller) {<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LogRoller tmpLogRoller = new LogRoller(this, this);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>      String n = Thread.currentThread().getName();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      Threads.setDaemonThreadRunning(tmpLogRoller.getThread(),<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          n + "-MetaLogRoller", uncaughtExceptionHandler);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      if (metawalRoller.compareAndSet(null, tmpLogRoller)) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        roller = tmpLogRoller;<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>      } else {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        // Another thread won starting the roller<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>        Threads.shutdown(tmpLogRoller.getThread());<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>        roller = metawalRoller.get();<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    return roller;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>  public MetricsRegionServer getRegionServerMetrics() {<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    return this.metricsRegionServer;<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  /**<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>   * @return Master address tracker instance.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>   */<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>    return this.masterAddressTracker;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>  }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>  /*<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>   * hosting server. Worker logs the exception and exits.<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>   */<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  private void startServiceThreads() throws IOException {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    // Start executor services<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>      conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      this.service.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    }<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    this.service.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>       "hbase.regionserver.wal.max.splitters", SplitLogWorkerCoordination.DEFAULT_MAX_SPLITTERS));<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // Start the threads for compacted files discharger<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    this.service.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>      this.service.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    }<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span><a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    Threads.setDaemonThreadRunning(this.walRoller.getThread(), getName() + ".logRoller",<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        uncaughtExceptionHandler);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    if (this.compactionChecker != null) choreService.scheduleChore(compactionChecker);<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    if (this.periodicFlusher != null) choreService.scheduleChore(periodicFlusher);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    if (this.healthCheckChore != null) choreService.scheduleChore(healthCheckChore);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    if (this.nonceManagerChore != null) choreService.scheduleChore(nonceManagerChore);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    if (this.storefileRefresher != null) choreService.scheduleChore(storefileRefresher);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    if (this.movedRegionsCleaner != null) choreService.scheduleChore(movedRegionsCleaner);<a name="line.1798"></a>
 <span class="sourceLineNo">1799</span><a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        this.replicationSourceHandler != null) {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    } else {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      if (this.replicationSourceHandler != null) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      if (this.replicationSinkHandler != null) {<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>      }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    }<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span><a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    // Create the log splitting worker and start it<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>    sinkConf.setInt("hbase.client.serverside.retries.multiplier", 1);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>    this.splitLogWorker = new SplitLogWorker(this, sinkConf, this, this, walFactory);<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>    splitLogWorker.start();<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span><a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>  /**<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>   * Puts up the webui.<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>   * @return Returns final port -- maybe different from what we started with.<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>   * @throws IOException<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>   */<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>  private int putUpWebUI() throws IOException {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    if(this instanceof HMaster) {<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // -1 is for disabling info server<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    if (port &lt; 0) return port;<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span><a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      String msg =<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Failed to start http info server. Address " + addr<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>              + "hbase.regionserver.info.bindAddress";<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      LOG.error(msg);<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>      throw new IOException(msg);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    // check if auto port bind enabled<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>        false);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    while (true) {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      try {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        infoServer.addServlet("dump", "/dump", getDumpServlet());<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        configureInfoServer();<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        this.infoServer.start();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>        break;<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      } catch (BindException e) {<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        if (!auto) {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          // auto bind disabled throw BindException<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>          throw e;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        }<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        // auto bind enabled, try to use another port<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        port++;<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    port = this.infoServer.getPort();<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    return port;<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  /*<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   * Verify that server is healthy<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   */<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  private boolean isHealthy() {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    if (!fsOk) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      // File system problem<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    // Verify that all threads are alive<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    if (!(leases.isAlive()<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        &amp;&amp; cacheFlusher.isAlive() &amp;&amp; walRoller.isAlive()<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        &amp;&amp; this.compactionChecker.isScheduled()<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        &amp;&amp; this.periodicFlusher.isScheduled())) {<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      stop("One or more threads are no longer alive -- stop");<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      return false;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    final LogRoller metawalRoller = this.metawalRoller.get();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    if (metawalRoller != null &amp;&amp; !metawalRoller.isAlive()) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      stop("Meta WAL roller thread is no longer alive -- stop");<a name="line.1900"></a>
+<span class="sourceLineNo">1800</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    // an unhandled exception, it will just exit.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    Threads.setDaemonThreadRunning(this.leases.getThread(), getName() + ".leaseChecker",<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      uncaughtExceptionHandler);<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        this.replicationSourceHandler != null) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    } else {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      if (this.replicationSourceHandler != null) {<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      }<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      if (this.replicationSinkHandler != null) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    // Create the log splitting worker and start it<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sinkConf.setInt("hbase.client.serverside.retries.multiplier", 1);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    this.splitLogWorker = new SplitLogWorker(this, sinkConf, this, this, walFactory);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>    splitLogWorker.start();<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>  /**<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>   * Puts up the webui.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>   * @return Returns final port -- maybe different from what we started with.<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>   * @throws IOException<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>   */<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>  private int putUpWebUI() throws IOException {<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>    if(this instanceof HMaster) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    // -1 is for disabling info server<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    if (port &lt; 0) return port;<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      String msg =<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Failed to start http info server. Address " + addr<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              + "hbase.regionserver.info.bindAddress";<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>      LOG.error(msg);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>      throw new IOException(msg);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>    // check if auto port bind enabled<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        false);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>    while (true) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      try {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        infoServer.addServlet("dump", "/dump", ge

<TRUNCATED>

[11/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
index ac4f63e..9ec3893 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
@@ -35,358 +35,366 @@
 <span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Timer;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.TimerTask;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.google.common.annotations.VisibleForTesting;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import com.google.common.collect.Lists;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.Log;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.commons.logging.LogFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * we will ignore updates to that snapshot's files.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * &lt;p&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * being run.<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * &lt;p&gt;<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * also removed from the cache.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * all the files under all the regions.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * &lt;p&gt;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span>@InterfaceAudience.Private<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@InterfaceStability.Evolving<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class SnapshotFileCache implements Stoppable {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  interface SnapshotFileInspector {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>     * Returns a collection of file names needed by the snapshot.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * @return the collection of file names needed by the snapshot.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private volatile boolean stop = false;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final FileSystem fs;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final SnapshotFileInspector fileInspector;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final Path snapshotDir;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * them if they haven't changed since the last time we looked.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final Timer refreshTimer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private long lastModifiedTime = Long.MIN_VALUE;<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * filesystem.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * &lt;p&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Immediately loads the file cache.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *          hbase root directory<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        refreshThreadName, inspectSnapshotFiles);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * filesystem<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param rootDir hbase root directory<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.fs = fs;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      cacheRefreshPeriod);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * cache refreshes.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * &lt;p&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Blocks until the cache is refreshed.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * &lt;p&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Exposed for TESTING.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public void triggerCacheRefreshForTesting() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      SnapshotFileCache.this.refreshCache();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    } catch (IOException e) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    LOG.debug("Current cache:" + cache);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * is refreshed and the cache checked again for that file.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * This ensures that we never return files that exist.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * &lt;p&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * at that point, cache will still think the file system contains that file and return<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *              is called (NOT LAZY)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      throws IOException {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    boolean refreshed = false;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (FileStatus file : files) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      String fileName = file.getPath().getName();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        refreshCache();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        refreshed = true;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (cache.contains(fileName)) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      if (snapshotsInProgress == null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        snapshotsInProgress = getSnapshotsInProgress();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        continue;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      unReferencedFiles.add(file);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    return unReferencedFiles;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private synchronized void refreshCache() throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean hasChanges = false;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (FileNotFoundException e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      if (this.cache.size() &gt; 0) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      if (!hasChanges) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        if (tmpSnapshots != null) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } catch (FileNotFoundException e) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Nothing todo, if the tmp dir is empty<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!hasChanges) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<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>    // directory was modified, so we need to reload our cache<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // 1. update the modified time<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.lastModifiedTime = lastTimestamp;<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // 2.clear the cache<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.cache.clear();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // 3. check each of the snapshot directories<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (snapshots == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      // remove all the remembered snapshots because we don't have any left<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      this.snapshots.clear();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      return;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // 3.1 iterate through the on-disk snapshots<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    for (FileStatus snapshot : snapshots) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String name = snapshot.getPath().getName();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // its not the tmp dir,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // probably changed.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          // get all files for the snapshot and create a new info<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        // 3.2 add all the files to cache<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        this.cache.addAll(files.getFiles());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        known.put(name, files);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // 4. set the snapshots we are tracking<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    this.snapshots.clear();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.snapshots.putAll(known);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress() throws IOException {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // only add those files to the cache, but not to the known snapshots<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // only add those files to the cache, but not to the known snapshots<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (running != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      for (FileStatus run : running) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        } catch (CorruptedSnapshotException e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          // See HBASE-16464<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            // If the snapshot is not in progress, we will delete it<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            if (!fs.exists(new Path(run.getPath(),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              SnapshotDescriptionUtils.SNAPSHOT_IN_PROGRESS))) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>              fs.delete(run.getPath(), true);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>              LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.313"></a>
-<span class="sourceLineNo">314</span>            }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          } else {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            throw e;<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>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return snapshotInProgress;<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>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public class RefreshCacheTask extends TimerTask {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public void run() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        SnapshotFileCache.this.refreshCache();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      } catch (IOException e) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public void stop(String why) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (!this.stop) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.stop = true;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.refreshTimer.cancel();<a name="line.342"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import com.google.common.annotations.VisibleForTesting;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.google.common.collect.Lists;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.commons.logging.Log;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.LogFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<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.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * &lt;p&gt;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * we will ignore updates to that snapshot's files.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * being run.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * also removed from the cache.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * all the files under all the regions.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;p&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>@InterfaceAudience.Private<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceStability.Evolving<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class SnapshotFileCache implements Stoppable {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  interface SnapshotFileInspector {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>     * Returns a collection of file names needed by the snapshot.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return the collection of file names needed by the snapshot.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private volatile boolean stop = false;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final FileSystem fs;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final SnapshotFileInspector fileInspector;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final Path snapshotDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * them if they haven't changed since the last time we looked.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final Timer refreshTimer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private long lastModifiedTime = Long.MIN_VALUE;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * filesystem.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * &lt;p&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * Immediately loads the file cache.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *          hbase root directory<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        refreshThreadName, inspectSnapshotFiles);<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>  /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * filesystem<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @param rootDir hbase root directory<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.fs = fs;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      cacheRefreshPeriod);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * cache refreshes.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Blocks until the cache is refreshed.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * &lt;p&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Exposed for TESTING.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void triggerCacheRefreshForTesting() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      SnapshotFileCache.this.refreshCache();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (IOException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    LOG.debug("Current cache:" + cache);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * is refreshed and the cache checked again for that file.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * This ensures that we never return files that exist.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * &lt;p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * at that point, cache will still think the file system contains that file and return<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   *              is called (NOT LAZY)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      final SnapshotManager snapshotManager)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    boolean refreshed = false;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (FileStatus file : files) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      String fileName = file.getPath().getName();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        refreshCache();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        refreshed = true;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (cache.contains(fileName)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        continue;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (snapshotsInProgress == null) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        snapshotsInProgress = getSnapshotsInProgress(snapshotManager);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        continue;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      unReferencedFiles.add(file);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    return unReferencedFiles;<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>  private synchronized void refreshCache() throws IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    boolean hasChanges = false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    } catch (FileNotFoundException e) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      if (this.cache.size() &gt; 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      return;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (!hasChanges) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        if (tmpSnapshots != null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    } catch (FileNotFoundException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // Nothing todo, if the tmp dir is empty<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>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    if (!hasChanges) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      return;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // directory was modified, so we need to reload our cache<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    // 1. update the modified time<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    this.lastModifiedTime = lastTimestamp;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    // 2.clear the cache<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.cache.clear();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // 3. check each of the snapshot directories<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    if (snapshots == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // remove all the remembered snapshots because we don't have any left<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      this.snapshots.clear();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // 3.1 iterate through the on-disk snapshots<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    for (FileStatus snapshot : snapshots) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      String name = snapshot.getPath().getName();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // its not the tmp dir,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        // probably changed.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          // get all files for the snapshot and create a new info<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        // 3.2 add all the files to cache<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        this.cache.addAll(files.getFiles());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        known.put(name, files);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // 4. set the snapshots we are tracking<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    this.snapshots.clear();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.snapshots.putAll(known);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress(<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    final SnapshotManager snapshotManager) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    // only add those files to the cache, but not to the known snapshots<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // only add those files to the cache, but not to the known snapshots<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (running != null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      for (FileStatus run : running) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ReentrantLock lock = null;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        if (snapshotManager != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          lock = snapshotManager.getLocks().acquireLock(run.getPath().getName());<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        } catch (CorruptedSnapshotException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          // See HBASE-16464<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>            // If the snapshot is corrupt, we will delete it<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            fs.delete(run.getPath(), true);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>            throw e;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        } finally {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          if (lock != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            lock.unlock();<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>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return snapshotInProgress;<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>  /**<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  public class RefreshCacheTask extends TimerTask {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    @Override<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    public void run() {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      try {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        SnapshotFileCache.this.refreshCache();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  @Override<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public boolean isStopped() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return this.stop;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Information about a snapshot directory<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private static class SnapshotDirectoryInfo {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long lastModified;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Collection&lt;String&gt; files;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.lastModified = mtime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      this.files = files;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    /**<a name="line.364"></a>
-<span class="sourceLineNo">365</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>     */<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public Collection&lt;String&gt; getFiles() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.files;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * Check if the snapshot directory has been modified<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     * @param mtime current modification time of the directory<a name="line.373"></a>
-<span class="sourceLineNo">374</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.374"></a>
-<span class="sourceLineNo">375</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>     */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    public boolean hasBeenModified(long mtime) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return this.lastModified &lt; mtime;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>}<a name="line.381"></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>  @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public void stop(String why) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    if (!this.stop) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.stop = true;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      this.refreshTimer.cancel();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  public boolean isStopped() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return this.stop;<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>   * Information about a snapshot directory<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private static class SnapshotDirectoryInfo {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    long lastModified;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    Collection&lt;String&gt; files;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      this.lastModified = mtime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      this.files = files;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    /**<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public Collection&lt;String&gt; getFiles() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return this.files;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>    /**<a name="line.379"></a>
+<span class="sourceLineNo">380</span>     * Check if the snapshot directory has been modified<a name="line.380"></a>
+<span class="sourceLineNo">381</span>     * @param mtime current modification time of the directory<a name="line.381"></a>
+<span class="sourceLineNo">382</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    public boolean hasBeenModified(long mtime) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      return this.lastModified &lt; mtime;<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>
 
 
 


[27/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
index 66dbcf3..7293a11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
@@ -130,7 +130,7 @@
 <span class="sourceLineNo">122</span><a name="line.122"></a>
 <span class="sourceLineNo">123</span>    /** We need to store a copy of the key. */<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    protected byte[] keyBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = null;<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    protected long memstoreTS;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    protected int nextKvOffset;<a name="line.128"></a>
@@ -140,1035 +140,1046 @@
 <span class="sourceLineNo">132</span>    private final ObjectIntPair&lt;ByteBuffer&gt; tmpPair;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    private final boolean includeTags;<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.tmpPair = tmpPair;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.includeTags = includeTags;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected boolean isValid() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return valueOffset != -1;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    protected void invalidate() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      valueOffset = -1;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      tagsCompressedLength = 0;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      uncompressTags = true;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      currentBuffer = null;<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>    protected void ensureSpaceForKey() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // rare case, but we need to handle arbitrary length of key<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          newKeyBufferLength *= 2;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        keyBuffer = newKeyBuffer;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    protected void ensureSpaceForTags() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          newTagsBufferLength *= 2;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        tagsBuffer = newTagsBuffer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      memstoreTS = memTS;<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>    /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     * Copy the state from the next one into this instance (the previous state<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     * seeker to the next key/value.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>     */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else if (!isValid()) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Note: we can only call isValid before we override our state, so this<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // comes before all the assignments at the end of this method.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>             nextState.keyLength);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // don't copy the common prefix between this key and the previous one<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                - nextState.lastCommonPrefix);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentKey = nextState.currentKey;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      valueOffset = nextState.valueOffset;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      keyLength = nextState.keyLength;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      valueLength = nextState.valueLength;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      memstoreTS = nextState.memstoreTS;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      currentBuffer = nextState.currentBuffer;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      tagsOffset = nextState.tagsOffset;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      tagsLength = nextState.tagsLength;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (nextState.tagCompressionContext != null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        tagCompressionContext = nextState.tagCompressionContext;<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>    public Cell toCell() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ByteBuffer valAndTagsBuffer;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      int vOffset;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int valAndTagsLength = this.valueLength;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int tagsLenSerializationSize = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // length<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        int tagsLenSerializationSize) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      int tOffset = 0;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (this.includeTags) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (this.tagCompressionContext == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          tagsArray = valAndTagsBuffer.array();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              + tagsLenSerializationSize;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        } else {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          tOffset = 0;<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>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          tOffset, this.tagsLength);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int tagsLenSerializationSize) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      int tOffset = 0;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.includeTags) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        if (this.tagCompressionContext == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          tagsBuf = valAndTagsBuffer;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        } else {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          tOffset = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * seeker state members for taking a clone.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * represented by the valueOffset and valueLength<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Streamable {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    private byte[] keyOnlyBuffer;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    private short rowLength;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    private int familyOffset;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    private byte familyLength;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    private int qualifierOffset;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    private int qualifierLength;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    private long timestamp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    private byte typeByte;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    private byte[] valueBuffer;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    private int valueOffset;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    private int valueLength;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    private byte[] tagsBuffer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    private int tagsOffset;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    private int tagsLength;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    private long seqId;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        int tagsOffset, int tagsLength) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      this.rowLength = rowLength;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      this.familyOffset = familyOffset;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.familyLength = familyLength;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      this.qualifierOffset = qualOffset;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.qualifierLength = qualLength;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      this.timestamp = timeStamp;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      this.typeByte = typeByte;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      this.valueBuffer = valueBuffer;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.valueOffset = valueOffset;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.valueLength = valueLen;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.tagsBuffer = tagsBuffer;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.tagsOffset = tagsOffset;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.tagsLength = tagsLength;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      setSequenceId(seqId);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public byte[] getRowArray() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return keyOnlyBuffer;<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>    @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public byte[] getFamilyArray() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return keyOnlyBuffer;<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>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public byte[] getQualifierArray() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return keyOnlyBuffer;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public int getRowOffset() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return Bytes.SIZEOF_SHORT;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public short getRowLength() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return rowLength;<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>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public int getFamilyOffset() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return familyOffset;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public byte getFamilyLength() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return familyLength;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public int getQualifierOffset() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return qualifierOffset;<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public int getQualifierLength() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return qualifierLength;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public long getTimestamp() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      return timestamp;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public byte getTypeByte() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return typeByte;<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>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public long getSequenceId() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return seqId;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public byte[] getValueArray() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return this.valueBuffer;<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>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public int getValueOffset() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return valueOffset;<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>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public int getValueLength() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return valueLength;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    public byte[] getTagsArray() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      return this.tagsBuffer;<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>    @Override<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    public int getTagsOffset() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return this.tagsOffset;<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>    @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    public int getTagsLength() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return tagsLength;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    @Override<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    public String toString() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.427"></a>
+<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        boolean tagsCompressed) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.tmpPair = tmpPair;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.includeTags = includeTags;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      if (tagsCompressed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        tagsBuffer = HConstants.EMPTY_BYTE_ARRAY;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    protected boolean isValid() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return valueOffset != -1;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    protected void invalidate() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      valueOffset = -1;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      tagsCompressedLength = 0;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      uncompressTags = true;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      currentBuffer = null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    protected void ensureSpaceForKey() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        // rare case, but we need to handle arbitrary length of key<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          newKeyBufferLength *= 2;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        keyBuffer = newKeyBuffer;<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><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    protected void ensureSpaceForTags() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          newTagsBufferLength *= 2;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        tagsBuffer = newTagsBuffer;<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><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      memstoreTS = memTS;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>     * Copy the state from the next one into this instance (the previous state<a name="line.190"></a>
+<span class="sourceLineNo">191</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.191"></a>
+<span class="sourceLineNo">192</span>     * seeker to the next key/value.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else if (!isValid()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        // Note: we can only call isValid before we override our state, so this<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // comes before all the assignments at the end of this method.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>             nextState.keyLength);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        // don't copy the common prefix between this key and the previous one<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                - nextState.lastCommonPrefix);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentKey = nextState.currentKey;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      valueOffset = nextState.valueOffset;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      keyLength = nextState.keyLength;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      valueLength = nextState.valueLength;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      memstoreTS = nextState.memstoreTS;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      currentBuffer = nextState.currentBuffer;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      tagsOffset = nextState.tagsOffset;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      tagsLength = nextState.tagsLength;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (nextState.tagCompressionContext != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tagCompressionContext = nextState.tagCompressionContext;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public Cell toCell() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      ByteBuffer valAndTagsBuffer;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      int vOffset;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      int valAndTagsLength = this.valueLength;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int tagsLenSerializationSize = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        // length<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<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><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        int tagsLenSerializationSize) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      int tOffset = 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (this.includeTags) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (this.tagCompressionContext == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          tagsArray = valAndTagsBuffer.array();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              + tagsLenSerializationSize;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          tOffset = 0;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          tOffset, this.tagsLength);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        int tagsLenSerializationSize) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      int tOffset = 0;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      if (this.includeTags) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        if (this.tagCompressionContext == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          tagsBuf = valAndTagsBuffer;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          tOffset = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * seeker state members for taking a clone.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * represented by the valueOffset and valueLength<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      Streamable {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    private byte[] keyOnlyBuffer;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    private short rowLength;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    private int familyOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    private byte familyLength;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private int qualifierOffset;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    private int qualifierLength;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private long timestamp;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private byte typeByte;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    private byte[] valueBuffer;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    private int valueOffset;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    private int valueLength;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    private byte[] tagsBuffer;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    private int tagsOffset;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    private int tagsLength;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    private long seqId;<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int tagsOffset, int tagsLength) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      this.rowLength = rowLength;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      this.familyOffset = familyOffset;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      this.familyLength = familyLength;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.qualifierOffset = qualOffset;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.qualifierLength = qualLength;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.timestamp = timeStamp;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.typeByte = typeByte;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.valueBuffer = valueBuffer;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.valueOffset = valueOffset;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.valueLength = valueLen;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.tagsBuffer = tagsBuffer;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.tagsOffset = tagsOffset;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.tagsLength = tagsLength;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setSequenceId(seqId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    public byte[] getRowArray() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return keyOnlyBuffer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public byte[] getFamilyArray() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return keyOnlyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    @Override<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public byte[] getQualifierArray() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return keyOnlyBuffer;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public int getRowOffset() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return Bytes.SIZEOF_SHORT;<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>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public short getRowLength() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return rowLength;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    public int getFamilyOffset() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return familyOffset;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public byte getFamilyLength() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return familyLength;<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public int getQualifierOffset() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return qualifierOffset;<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>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public int getQualifierLength() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return qualifierLength;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    public long getTimestamp() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return timestamp;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    public byte getTypeByte() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return typeByte;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public long getSequenceId() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return seqId;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public byte[] getValueArray() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return this.valueBuffer;<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>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public int getValueOffset() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      return valueOffset;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    public int getValueLength() {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return valueLength;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public byte[] getTagsArray() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return this.tagsBuffer;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public int getTagsOffset() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return this.tagsOffset;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public int getTagsLength() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return tagsLength;<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>    @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    public void setSequenceId(long seqId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.seqId = seqId;<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>    @Override<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public long heapSize() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    public int write(OutputStream out) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return write(out, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          tagsLength, withTags);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // Write key<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      out.write(keyOnlyBuffer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // Write value<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (withTags) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        // 2 bytes tags length followed by tags bytes<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      SettableSequenceId, Streamable {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.BYTE_BUFFER));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private ByteBuffer keyBuffer;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    private short rowLength;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    private int familyOffset;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private byte familyLength;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private int qualifierOffset;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    private int qualifierLength;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private long timestamp;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    private byte typeByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private ByteBuffer valueBuffer;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    private int valueOffset;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    private int valueLength;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    private ByteBuffer tagsBuffer;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    private int tagsOffset;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    private int tagsLength;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    private long seqId;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    protected OffheapDecodedCell(ByteBuffer keyBuffer, short rowLength, int familyOffset,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        ByteBuffer valueBuffer, int valueOffset, int valueLen, long seqId, ByteBuffer tagsBuffer,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        int tagsOffset, int tagsLength) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // The keyBuffer is always onheap<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      assert keyBuffer.hasArray();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      assert keyBuffer.arrayOffset() == 0;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this.keyBuffer = keyBuffer;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.rowLength = rowLength;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      this.familyOffset = familyOffset;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      this.familyLength = familyLength;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.qualifierOffset = qualOffset;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.qualifierLength = qualLength;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.timestamp = timeStamp;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.typeByte = typeByte;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.valueBuffer = valueBuffer;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.valueOffset = valueOffset;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      this.valueLength = valueLen;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      this.tagsBuffer = tagsBuffer;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.tagsOffset = tagsOffset;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.tagsLength = tagsLength;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      setSequenceId(seqId);<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>    @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public byte[] getRowArray() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      return this.keyBuffer.array();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public int getRowOffset() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return getRowPosition();<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>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public short getRowLength() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.rowLength;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public byte[] getFamilyArray() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.keyBuffer.array();<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>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public int getFamilyOffset() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      return getFamilyPosition();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public byte getFamilyLength() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.familyLength;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public byte[] getQualifierArray() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.keyBuffer.array();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @Override<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    public int getQualifierOffset() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return getQualifierPosition();<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>    @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    public int getQualifierLength() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.qualifierLength;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public long getTimestamp() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.timestamp;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public byte getTypeByte() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      return this.typeByte;<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>    @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    public long getSequenceId() {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      return this.seqId;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    public byte[] getValueArray() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      return CellUtil.cloneValue(this);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public int getValueOffset() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      return 0;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>    @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    public int getValueLength() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.valueLength;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    public byte[] getTagsArray() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return CellUtil.cloneTags(this);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    public int getTagsOffset() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return 0;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public int getTagsLength() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      return this.tagsLength;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    public ByteBuffer getRowByteBuffer() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.keyBuffer;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    public int getRowPosition() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      return Bytes.SIZEOF_SHORT;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    public ByteBuffer getFamilyByteBuffer() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return this.keyBuffer;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    @Override<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    public int getFamilyPosition() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.familyOffset;<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>    @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    public ByteBuffer getQualifierByteBuffer() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return this.keyBuffer;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>    @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    public int getQualifierPosition() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      return this.qualifierOffset;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    @Override<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    public ByteBuffer getValueByteBuffer() {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.valueBuffer;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    @Override<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public int getValuePosition() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return this.valueOffset;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    @Override<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    public ByteBuffer getTagsByteBuffer() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      return this.tagsBuffer;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    @Override<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    public int getTagsPosition() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.tagsOffset;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public long heapSize() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>    @Override<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    public void setSequenceId(long seqId) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      this.seqId = seqId;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    @Override<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    public int write(OutputStream out) throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return write(out, true);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          tagsLength, withTags);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      ByteBufferUtils.putInt(out, keyBuffer.capacity());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Write key<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      out.write(keyBuffer.array());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Write value<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      ByteBufferUtils.copyBufferToStream(out, this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (withTags) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // 2 bytes tags length followed by tags bytes<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        ByteBufferUtils.copyBufferToStream(out, this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      return lenToWrite + Bytes.SIZEOF_INT;<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>  protected abstract static class<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      BufferedEncodedSeeker&lt;STATE extends SeekerState&gt;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      implements EncodedSeeker {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    protected HFileBlockDecodingContext decodingCtx;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    protected final CellComparator comparator;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    protected ByteBuff currentBuffer;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    protected TagCompressionContext tagCompressionContext = null;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    protected  KeyValue.KeyOnlyKeyValue keyOnlyKV = new KeyValue.KeyOnlyKeyValue();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // many object creations.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    protected STATE current, previous;<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    public BufferedEncodedSeeker(CellComparator comparator,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        HFileBlockDecodingContext decodingCtx) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      this.comparator = comparator;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      this.decodingCtx = decodingCtx;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (decodingCtx.getHFileContext().isCompressTags()) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        try {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          tagCompressionContext = new TagCompressionContext(LRUDictionary.class, Byte.MAX_VALUE);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        } catch (Exception e) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          throw new RuntimeException("Failed to initialize TagCompressionContext", e);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      current = createSeekerState(); // always valid<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      previous = createSeekerState(); // may not be valid<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    protected boolean includesMvcc() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    protected boolean includesTags() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    @Override<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    public int compareKey(CellComparator comparator, Cell key) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      keyOnlyKV.setKey(current.keyBuffer, 0, current.keyLength);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      return comparator.compareKeyIgnoresMvcc(key, keyOnlyKV);<a name="line.730"></a>
+<span class="sourceLineNo">431</span>    public String toString() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    public void setSequenceId(long seqId) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      this.seqId = seqId;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public long heapSize() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<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>    @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    public int write(OutputStream out) throws IOException {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return write(out, true);<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>    @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          tagsLength, withTags);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      // Write key<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      out.write(keyOnlyBuffer);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      // Write value<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (withTags) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        // 2 bytes tags length followed by tags bytes<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>

<TRUNCATED>

[44/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
index 6ba8536..94d3deb 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
@@ -436,7 +436,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>afterEncodingKeyValue</h4>
-<pre>protected final&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.995">afterEncodingKeyValue</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>protected final&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1006">afterEncodingKeyValue</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
                         <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx)
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -452,7 +452,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>afterDecodingKeyValue</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1026">afterDecodingKeyValue</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1037">afterDecodingKeyValue</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;dest,
                          <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultDecodingContext</a>&nbsp;decodingCtx)
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -466,7 +466,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>newDataBlockEncodingContext</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1059">newDataBlockEncodingContext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1070">newDataBlockEncodingContext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
                                                     byte[]&nbsp;header,
                                                     <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">DataBlockEncoder</a></code></strong></div>
@@ -485,7 +485,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>newDataBlockDecodingContext</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1065">newDataBlockDecodingContext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1076">newDataBlockDecodingContext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">DataBlockEncoder</a></code></strong></div>
 <div class="block">Creates an encoder specific decoding context, which will prepare the data
  before actual decoding</div>
@@ -502,7 +502,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>internalDecodeKeyValues</h4>
-<pre>protected abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1069">internalDecodeKeyValues</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
+<pre>protected abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1080">internalDecodeKeyValues</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
                                  int&nbsp;allocateHeaderLength,
                                  int&nbsp;skipLastBytes,
                                  <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultDecodingContext</a>&nbsp;decodingCtx)
@@ -517,7 +517,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSpace</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1080">ensureSpace</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1091">ensureSpace</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                int&nbsp;length)
                            throws <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncoderBufferTooSmallException.html" title="class in org.apache.hadoop.hbase.io.encoding">EncoderBufferTooSmallException</a></pre>
 <div class="block">Asserts that there is at least the given amount of unfilled space
@@ -533,7 +533,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>startBlockEncoding</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1091">startBlockEncoding</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1102">startBlockEncoding</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
                       <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">DataBlockEncoder</a></code></strong></div>
@@ -553,7 +553,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>encode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1127">encode</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1138">encode</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
          <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -573,7 +573,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>internalEncode</h4>
-<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1136">internalEncode</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1147">internalEncode</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                  <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -587,7 +587,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>endBlockEncoding</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1140">endBlockEncoding</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1151">endBlockEncoding</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
                     byte[]&nbsp;uncompressedBytesWithHeader)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -607,7 +607,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createFirstKeyCell</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1155">createFirstKeyCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1166">createFirstKeyCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
                       int&nbsp;keyLength)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html
index 5af299a..84ef56a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html
@@ -87,7 +87,7 @@
 <li class="blockList">
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>, <a href="../../../../../../org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.html" title="class in org.apache.hadoop.hbase.codec.prefixtree">PrefixTreeSeeker</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>, <a href="../../../../../../org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.html" title="class in org.apache.hadoop.hbase.codec.prefixtree">PrefixTreeSeeker</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dd>
 </dl>
 <dl>
 <dt>Enclosing interface:</dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html
index c4a7039..ab765de 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html
@@ -87,7 +87,7 @@
 <li class="blockList">
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">CopyKeyDataBlockEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">DiffKeyDeltaEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">FastDiffDeltaEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">PrefixKeyDeltaEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.html" title="class in org.apache.hadoop.hbase.code
 c.prefixtree">PrefixTreeCodec</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">CopyKeyDataBlockEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">DiffKeyDeltaEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">FastDiffDeltaEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">PrefixKeyDeltaEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.html" title="class in org.apache.hadoop.hbase.code
 c.prefixtree">PrefixTreeCodec</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dd>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
index 6db867c..3614672 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
@@ -146,6 +146,9 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is
 <tr class="altColor">
 <td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#PREFIX_TREE">PREFIX_TREE</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#ROW_INDEX_V1">ROW_INDEX_V1</a></strong></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -338,12 +341,21 @@ the order they are declared.</div>
 <a name="PREFIX_TREE">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>PREFIX_TREE</h4>
 <pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.46">PREFIX_TREE</a></pre>
 </li>
 </ul>
+<a name="ROW_INDEX_V1">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ROW_INDEX_V1</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.47">ROW_INDEX_V1</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ FIELD DETAIL =========== -->
@@ -358,7 +370,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>id</h4>
-<pre>private final&nbsp;short <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.48">id</a></pre>
+<pre>private final&nbsp;short <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.49">id</a></pre>
 </li>
 </ul>
 <a name="idInBytes">
@@ -367,7 +379,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>idInBytes</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.49">idInBytes</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.50">idInBytes</a></pre>
 </li>
 </ul>
 <a name="encoder">
@@ -376,7 +388,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>encoder</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.50">encoder</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.51">encoder</a></pre>
 </li>
 </ul>
 <a name="encoderCls">
@@ -385,7 +397,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>encoderCls</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.51">encoderCls</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.52">encoderCls</a></pre>
 </li>
 </ul>
 <a name="ID_SIZE">
@@ -394,7 +406,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>ID_SIZE</h4>
-<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.53">ID_SIZE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.54">ID_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.encoding.DataBlockEncoding.ID_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -404,7 +416,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>idToEncoding</h4>
-<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang">Short</a>,<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.56">idToEncoding</a></pre>
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang">Short</a>,<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.57">idToEncoding</a></pre>
 <div class="block">Maps data block encoding ids to enum instances.</div>
 </li>
 </ul>
@@ -457,7 +469,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getNameInBytes</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.91">getNameInBytes</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.92">getNameInBytes</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>name converted to bytes.</dd></dl>
 </li>
 </ul>
@@ -467,7 +479,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getId</h4>
-<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.98">getId</a>()</pre>
+<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.99">getId</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The id of a data block encoder.</dd></dl>
 </li>
 </ul>
@@ -477,7 +489,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>writeIdInBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.106">writeIdInBytes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.107">writeIdInBytes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Writes id in bytes.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>stream</code> - where the id should be written.</dd>
@@ -491,7 +503,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>writeIdInBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.118">writeIdInBytes</a>(byte[]&nbsp;dest,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.119">writeIdInBytes</a>(byte[]&nbsp;dest,
                   int&nbsp;offset)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Writes id bytes to the given array starting from offset.</div>
@@ -506,7 +518,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncoder</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.127">getEncoder</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.128">getEncoder</a>()</pre>
 <div class="block">Return new data block encoder for given algorithm type.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>data block encoder if algorithm is specified, null if none is
          selected.</dd></dl>
@@ -518,7 +530,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataBlockEncoderById</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.140">getDataBlockEncoderById</a>(short&nbsp;encoderId)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.141">getDataBlockEncoderById</a>(short&nbsp;encoderId)</pre>
 <div class="block">Find and create data block encoder for given id;</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encoderId</code> - id of data block encoder.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>Newly created data block encoder.</dd></dl>
@@ -530,7 +542,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getNameFromId</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.155">getNameFromId</a>(short&nbsp;encoderId)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.156">getNameFromId</a>(short&nbsp;encoderId)</pre>
 <div class="block">Find and return the name of data block encoder for the given id.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encoderId</code> - id of data block encoder</dd>
 <dt><span class="strong">Returns:</span></dt><dd>name, same as used in options in column family</dd></dl>
@@ -542,7 +554,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>isCorrectEncoder</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.167">isCorrectEncoder</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;encoder,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.168">isCorrectEncoder</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;encoder,
                        short&nbsp;encoderId)</pre>
 <div class="block">Check if given encoder has this id.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encoder</code> - encoder which id will be checked</dd><dd><code>encoderId</code> - id which we except</dd>
@@ -557,7 +569,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncodingById</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.180">getEncodingById</a>(short&nbsp;dataBlockEncodingId)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.181">getEncodingById</a>(short&nbsp;dataBlockEncodingId)</pre>
 </li>
 </ul>
 <a name="createEncoder(java.lang.String)">
@@ -566,7 +578,7 @@ not permitted.)</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createEncoder</h4>
-<pre>protected static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.184">createEncoder</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fullyQualifiedClassName)</pre>
+<pre>protected static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.185">createEncoder</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fullyQualifiedClassName)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
index 95b3181..f01253e 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
@@ -154,8 +154,9 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">DiffKeyDeltaEncoder.DiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                                                      boolean&nbsp;includeTags)</code>&nbsp;</td>
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">DiffKeyDeltaEncoder.DiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
+                                                                      boolean&nbsp;includeTags,
+                                                                      boolean&nbsp;tagsCompressed)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -234,14 +235,15 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair, boolean)">
+<a name="DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair, boolean, boolean)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DiffKeyDeltaEncoder.DiffSeekerState</h4>
 <pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#line.370">DiffKeyDeltaEncoder.DiffSeekerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                   boolean&nbsp;includeTags)</pre>
+                                   boolean&nbsp;includeTags,
+                                   boolean&nbsp;tagsCompressed)</pre>
 </li>
 </ul>
 </li>
@@ -258,7 +260,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <ul class="blockListLast">
 <li class="blockList">
 <h4>copyFromNext</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#line.375">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&nbsp;that)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#line.376">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&nbsp;that)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#copyFromNext(org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder.SeekerState)">BufferedDataBlockEncoder.SeekerState</a></code></strong></div>
 <div class="block">Copy the state from the next one into this instance (the previous state
  placeholder). Used to save the previous state when we are advancing the

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
index 1434b1e..18f8efc 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
@@ -489,7 +489,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <ul class="blockList">
 <li class="blockList">
 <h4>createSeeker</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#line.384">createSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#line.385">createSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                                           <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">DataBlockEncoder</a></code></strong></div>
 <div class="block">Create a HFileBlock seeker which find KeyValues within a block.</div>
@@ -503,7 +503,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <ul class="blockListLast">
 <li class="blockList">
 <h4>internalDecodeKeyValues</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#line.512">internalDecodeKeyValues</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#line.514">internalDecodeKeyValues</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
                                  int&nbsp;allocateHeaderLength,
                                  int&nbsp;skipLastBytes,
                                  <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultDecodingContext</a>&nbsp;decodingCtx)

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/EncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/EncodingState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/EncodingState.html
index 945df4c..4d88428 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/EncodingState.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/EncodingState.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a>, <a href="../../../../../../org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.PrefixTreeEncodingState.html" title="class in org.apache.hadoop.hbase.codec.prefixtree">PrefixTreeCodec.PrefixTreeEncodingState</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a>, <a href="../../../../../../org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.PrefixTreeEncodingState.html" title="class in org.apache.hadoop.hbase.codec.prefixtree">PrefixTreeCodec.PrefixTreeEncodingState</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1.RowIndexEncodingState</a></dd>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
index febb806..4cf98bc 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
@@ -158,8 +158,9 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">FastDiffDeltaEncoder.FastDiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                                                                boolean&nbsp;includeTags)</code>&nbsp;</td>
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">FastDiffDeltaEncoder.FastDiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
+                                                                                boolean&nbsp;includeTags,
+                                                                                boolean&nbsp;tagsCompressed)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -247,14 +248,15 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair, boolean)">
+<a name="FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair, boolean, boolean)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FastDiffDeltaEncoder.FastDiffSeekerState</h4>
 <pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#line.381">FastDiffDeltaEncoder.FastDiffSeekerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                        boolean&nbsp;includeTags)</pre>
+                                        boolean&nbsp;includeTags,
+                                        boolean&nbsp;tagsCompressed)</pre>
 </li>
 </ul>
 </li>
@@ -271,7 +273,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <ul class="blockListLast">
 <li class="blockList">
 <h4>copyFromNext</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#line.386">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&nbsp;that)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#line.387">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&nbsp;that)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#copyFromNext(org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder.SeekerState)">BufferedDataBlockEncoder.SeekerState</a></code></strong></div>
 <div class="block">Copy the state from the next one into this instance (the previous state
  placeholder). Used to save the previous state when we are advancing the

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
index a86c12c..1ab4c30 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
@@ -511,7 +511,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createSeeker</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#line.398">createSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#line.399">createSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                                           <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">DataBlockEncoder</a></code></strong></div>
 <div class="block">Create a HFileBlock seeker which find KeyValues within a block.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html
index 7aa9f23..d20546f 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
-<li>Next Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" target="_top">Frames</a></li>
@@ -398,7 +398,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedD
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
-<li>Next Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html
new file mode 100644
index 0000000..e5b3cf3
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html
@@ -0,0 +1,282 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RowIndexCodecV1.RowIndexEncodingState (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="RowIndexCodecV1.RowIndexEncodingState (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexCodecV1.RowIndexEncodingState.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.RowIndexEncodingState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods_inherited_from_class_java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.io.encoding</div>
+<h2 title="Class RowIndexCodecV1.RowIndexEncodingState" class="title">Class RowIndexCodecV1.RowIndexEncodingState</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">org.apache.hadoop.hbase.io.encoding.EncodingState</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.RowIndexEncodingState</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.56">RowIndexCodecV1.RowIndexEncodingState</a>
+extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">EncodingState</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html#encoder">encoder</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.io.encoding.EncodingState">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">EncodingState</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html#prevCell">prevCell</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private </code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html#RowIndexCodecV1.RowIndexEncodingState()">RowIndexCodecV1.RowIndexEncodingState</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="encoder">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>encoder</h4>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html#line.57">encoder</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="RowIndexCodecV1.RowIndexEncodingState()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>RowIndexCodecV1.RowIndexEncodingState</h4>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html#line.56">RowIndexCodecV1.RowIndexEncodingState</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexCodecV1.RowIndexEncodingState.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.RowIndexEncodingState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods_inherited_from_class_java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[03/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 4d08f6f..34bc830 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -1471,2010 +1471,2015 @@
 <span class="sourceLineNo">1463</span>        this, this.regionServerAccounting);<a name="line.1463"></a>
 <span class="sourceLineNo">1464</span>    if (this.hMemManager != null) {<a name="line.1464"></a>
 <span class="sourceLineNo">1465</span>      this.hMemManager.start(getChoreService());<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    }<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>  }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper,<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      getMyEphemeralNodePath(), data);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>  }<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span><a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  @Override<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    return regionServerAccounting;<a name="line.1484"></a>
+<span class="sourceLineNo">1466</span>      MemStoreChunkPool chunkPool = MemStoreChunkPool.getPool(this.conf);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      if (chunkPool != null) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>        // Register it as HeapMemoryTuneObserver<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>        this.hMemManager.registerTuneObserver(chunkPool);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      }<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>    }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span><a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper,<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      getMyEphemeralNodePath(), data);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>  }<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span><a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1484"></a>
 <span class="sourceLineNo">1485</span>  }<a name="line.1485"></a>
 <span class="sourceLineNo">1486</span><a name="line.1486"></a>
 <span class="sourceLineNo">1487</span>  @Override<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>  public TableLockManager getTableLockManager() {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    return tableLockManager;<a name="line.1489"></a>
+<span class="sourceLineNo">1488</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    return regionServerAccounting;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>  }<a name="line.1490"></a>
 <span class="sourceLineNo">1491</span><a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>  /*<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   * @param r Region to get RegionLoad for.<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   * @return RegionLoad instance.<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   * @throws IOException<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private RegionLoad createRegionLoad(final Region r, RegionLoad.Builder regionLoadBldr,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    int stores = 0;<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>    int storefiles = 0;<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    int storeUncompressedSizeMB = 0;<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    int storefileSizeMB = 0;<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    int memstoreSizeMB = (int) (r.getMemstoreSize() / 1024 / 1024);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    int storefileIndexSizeMB = 0;<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    int rootIndexSizeKB = 0;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    int totalStaticIndexSizeKB = 0;<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    int totalStaticBloomSizeKB = 0;<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    long totalCompactingKVs = 0;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    long currentCompactedKVs = 0;<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    List&lt;Store&gt; storeList = r.getStores();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    stores += storeList.size();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    for (Store store : storeList) {<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      storefiles += store.getStorefilesCount();<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      storefileIndexSizeMB += (int) (store.getStorefilesIndexSize() / 1024 / 1024);<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      if (progress != null) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        totalCompactingKVs += progress.totalCompactingKVs;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      rootIndexSizeKB += (int) (store.getStorefilesIndexSize() / 1024);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    if (regionLoadBldr == null) {<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    }<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    if (regionSpecifier == null) {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    regionSpecifier.setValue(ByteStringer.wrap(name));<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      .setStores(stores)<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      .setStorefiles(storefiles)<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      .setMemstoreSizeMB(memstoreSizeMB)<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      .setStorefileIndexSizeMB(storefileIndexSizeMB)<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>      .setRootIndexSizeKB(rootIndexSizeKB)<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      .setDataLocality(dataLocality)<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    ((HRegion)r).setCompleteSequenceId(regionLoadBldr);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span><a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    return regionLoadBldr.build();<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>  }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span><a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  /**<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>   * @param encodedRegionName<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>   * @return An instance of RegionLoad.<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>   */<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    Region r = onlineRegions.get(encodedRegionName);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  /*<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>   */<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>    private final HRegionServer instance;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    private final int majorCompactPriority;<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    private long iteration = 0;<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span><a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    CompactionChecker(final HRegionServer h, final int sleepTime,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>        final Stoppable stopper) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.instance = h;<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      LOG.info(this.getName() + " runs every " + StringUtils.formatTime(sleepTime));<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span><a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      /* MajorCompactPriority is configurable.<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>       * If not set, the compaction will use default priority.<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>       */<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        DEFAULT_PRIORITY);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    }<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span><a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    @Override<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    protected void chore() {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        if (r == null)<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          continue;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        for (Store s : r.getStores()) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>          try {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>            assert multiplier &gt; 0;<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>            if (iteration % multiplier != 0) continue;<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>            if (s.needsCompaction()) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>              this.instance.compactSplitThread.requestSystemCompaction(r, s, getName()<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>                  + " requests compaction");<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>            } else if (s.isMajorCompaction()) {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>              if (majorCompactPriority == DEFAULT_PRIORITY<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>                  || majorCompactPriority &gt; ((HRegion)r).getCompactPriority()) {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>                    + " requests major compaction; use default priority", null);<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>              } else {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>                    + " requests major compaction; use configured priority",<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>                  this.majorCompactPriority, null, null);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>              }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>            }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>          } catch (IOException e) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>            LOG.warn("Failed major compaction check on " + r, e);<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>      }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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><a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  static class PeriodicMemstoreFlusher extends ScheduledChore {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    final HRegionServer server;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      this.server = server;<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    }<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span><a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    @Override<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    protected void chore() {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      final StringBuffer whyFlush = new StringBuffer();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      for (Region r : this.server.onlineRegions.values()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        if (r == null) continue;<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        if (((HRegion)r).shouldFlush(whyFlush)) {<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>          if (requester != null) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>            long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>            LOG.info(getName() + " requesting flush of " +<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>              r.getRegionInfo().getRegionNameAsString() + " because " +<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>              whyFlush.toString() +<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>              " after random delay " + randomDelay + "ms");<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>            requester.requestDelayedFlush(r, randomDelay, false);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>          }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>        }<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  /**<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>   * completed (setting up filesystem, starting service threads, etc.). This<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>   * method is designed mostly to be useful in tests.<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>   *<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>   * @return true if online, false if not.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   */<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>  public boolean isOnline() {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>    return online.get();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>  }<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span><a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /**<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>   * Setup WAL log and replication if enabled.<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>   * Replication setup is done in here because it wants to be hooked up to WAL.<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>   * @return A WAL instance.<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>   * @throws IOException<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>   */<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  private WALFactory setupWALAndReplication() throws IOException {<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    final Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    final String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span><a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    Path logdir = new Path(rootDir, logName);<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    if (LOG.isDebugEnabled()) LOG.debug("logdir=" + logdir);<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    if (this.fs.exists(logdir)) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      throw new RegionServerRunningException("Region server has already " +<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>        "created directory at " + this.serverName.toString());<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    }<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span><a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    // Instantiate replication manager if replication enabled.  Pass it the<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    // log directories.<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>    createNewReplicationInstance(conf, this, this.fs, logdir, oldLogDir);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span><a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    // listeners the wal factory will add to wals it creates.<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    final List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;WALActionsListener&gt;();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    listeners.add(new MetricsWAL());<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        this.replicationSourceHandler.getWALActionsListener() != null) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      // Replication handler is an implementation of WALActionsListener.<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      listeners.add(this.replicationSourceHandler.getWALActionsListener());<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>    }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>    return new WALFactory(conf, listeners, serverName.toString());<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span><a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  /**<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>   * We initialize the roller for the wal that handles meta lazily<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>   * since we don't know if this regionserver will handle it. All calls to<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>   * this method return a reference to the that same roller. As newly referenced<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>   * meta regions are brought online, they will be offered to the roller for maintenance.<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>   * As a part of that registration process, the roller will add itself as a<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>   * listener on the wal.<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>   */<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>  protected LogRoller ensureMetaWALRoller() {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // Using a tmp log roller to ensure metaLogRoller is alive once it is not<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // null<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    LogRoller roller = metawalRoller.get();<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    if (null == roller) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>      LogRoller tmpLogRoller = new LogRoller(this, this);<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      String n = Thread.currentThread().getName();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      Threads.setDaemonThreadRunning(tmpLogRoller.getThread(),<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>          n + "-MetaLogRoller", uncaughtExceptionHandler);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      if (metawalRoller.compareAndSet(null, tmpLogRoller)) {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        roller = tmpLogRoller;<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      } else {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>        // Another thread won starting the roller<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>        Threads.shutdown(tmpLogRoller.getThread());<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        roller = metawalRoller.get();<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      }<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    return roller;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public MetricsRegionServer getRegionServerMetrics() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return this.metricsRegionServer;<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * @return Master address tracker instance.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    return this.masterAddressTracker;<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>  /*<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>   * hosting server. Worker logs the exception and exits.<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>   */<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  private void startServiceThreads() throws IOException {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    // Start executor services<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      this.service.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    }<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    this.service.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>       "hbase.regionserver.wal.max.splitters", SplitLogWorkerCoordination.DEFAULT_MAX_SPLITTERS));<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    // Start the threads for compacted files discharger<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    this.service.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      this.service.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    Threads.setDaemonThreadRunning(this.walRoller.getThread(), getName() + ".logRoller",<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>        uncaughtExceptionHandler);<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    if (this.compactionChecker != null) choreService.scheduleChore(compactionChecker);<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    if (this.periodicFlusher != null) choreService.scheduleChore(periodicFlusher);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    if (this.healthCheckChore != null) choreService.scheduleChore(healthCheckChore);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    if (this.nonceManagerChore != null) choreService.scheduleChore(nonceManagerChore);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    if (this.storefileRefresher != null) choreService.scheduleChore(storefileRefresher);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    if (this.movedRegionsCleaner != null) choreService.scheduleChore(movedRegionsCleaner);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    // an unhandled exception, it will just exit.<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    Threads.setDaemonThreadRunning(this.leases.getThread(), getName() + ".leaseChecker",<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      uncaughtExceptionHandler);<a name="line.1798"></a>
+<span class="sourceLineNo">1492</span>  @Override<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  public TableLockManager getTableLockManager() {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    return tableLockManager;<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>  /*<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>   * @param r Region to get RegionLoad for.<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>   * @return RegionLoad instance.<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>   *<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   * @throws IOException<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   */<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>  private RegionLoad createRegionLoad(final Region r, RegionLoad.Builder regionLoadBldr,<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    int stores = 0;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>    int storefiles = 0;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    int storeUncompressedSizeMB = 0;<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    int storefileSizeMB = 0;<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    int memstoreSizeMB = (int) (r.getMemstoreSize() / 1024 / 1024);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    int storefileIndexSizeMB = 0;<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    int rootIndexSizeKB = 0;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    int totalStaticIndexSizeKB = 0;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    int totalStaticBloomSizeKB = 0;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    long totalCompactingKVs = 0;<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    long currentCompactedKVs = 0;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    List&lt;Store&gt; storeList = r.getStores();<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    stores += storeList.size();<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    for (Store store : storeList) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      storefiles += store.getStorefilesCount();<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      storefileIndexSizeMB += (int) (store.getStorefilesIndexSize() / 1024 / 1024);<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      if (progress != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        totalCompactingKVs += progress.totalCompactingKVs;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>      }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      rootIndexSizeKB += (int) (store.getStorefilesIndexSize() / 1024);<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    if (regionLoadBldr == null) {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    }<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    if (regionSpecifier == null) {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>    }<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    regionSpecifier.setValue(ByteStringer.wrap(name));<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      .setStores(stores)<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      .setStorefiles(storefiles)<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>      .setMemstoreSizeMB(memstoreSizeMB)<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      .setStorefileIndexSizeMB(storefileIndexSizeMB)<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      .setRootIndexSizeKB(rootIndexSizeKB)<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>      .setDataLocality(dataLocality)<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    ((HRegion)r).setCompleteSequenceId(regionLoadBldr);<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    return regionLoadBldr.build();<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  }<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span><a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  /**<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>   * @param encodedRegionName<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>   * @return An instance of RegionLoad.<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>   */<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    Region r = onlineRegions.get(encodedRegionName);<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>  /*<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>   */<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    private final HRegionServer instance;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>    private final int majorCompactPriority;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    private long iteration = 0;<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    CompactionChecker(final HRegionServer h, final int sleepTime,<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>        final Stoppable stopper) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      this.instance = h;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      LOG.info(this.getName() + " runs every " + StringUtils.formatTime(sleepTime));<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      /* MajorCompactPriority is configurable.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>       * If not set, the compaction will use default priority.<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>       */<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>        getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        DEFAULT_PRIORITY);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    }<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    @Override<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    protected void chore() {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>        if (r == null)<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>          continue;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (Store s : r.getStores()) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          try {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>            assert multiplier &gt; 0;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>            if (iteration % multiplier != 0) continue;<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>            if (s.needsCompaction()) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>              this.instance.compactSplitThread.requestSystemCompaction(r, s, getName()<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>                  + " requests compaction");<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>            } else if (s.isMajorCompaction()) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>              if (majorCompactPriority == DEFAULT_PRIORITY<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>                  || majorCompactPriority &gt; ((HRegion)r).getCompactPriority()) {<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>                    + " requests major compaction; use default priority", null);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>              } else {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>                    + " requests major compaction; use configured priority",<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>                  this.majorCompactPriority, null, null);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>              }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>            }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>          } catch (IOException e) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>          }<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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><a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>  static class PeriodicMemstoreFlusher extends ScheduledChore {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    final HRegionServer server;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>    final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      this.server = server;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span><a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    @Override<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    protected void chore() {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      final StringBuffer whyFlush = new StringBuffer();<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      for (Region r : this.server.onlineRegions.values()) {<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        if (r == null) continue;<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>        if (((HRegion)r).shouldFlush(whyFlush)) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          if (requester != null) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>            long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME;<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>            LOG.info(getName() + " requesting flush of " +<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>              r.getRegionInfo().getRegionNameAsString() + " because " +<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>              whyFlush.toString() +<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>              " after random delay " + randomDelay + "ms");<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>            requester.requestDelayedFlush(r, randomDelay, false);<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>          }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>        }<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      }<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>   * completed (setting up filesystem, starting service threads, etc.). This<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>   * method is designed mostly to be useful in tests.<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   *<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   * @return true if online, false if not.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>   */<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>  public boolean isOnline() {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    return online.get();<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span><a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  /**<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>   * Setup WAL log and replication if enabled.<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>   * Replication setup is done in here because it wants to be hooked up to WAL.<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @return A WAL instance.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @throws IOException<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>  private WALFactory setupWALAndReplication() throws IOException {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    final Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>    final String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    Path logdir = new Path(rootDir, logName);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    if (LOG.isDebugEnabled()) LOG.debug("logdir=" + logdir);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    if (this.fs.exists(logdir)) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      throw new RegionServerRunningException("Region server has already " +<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>        "created directory at " + this.serverName.toString());<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span><a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    // Instantiate replication manager if replication enabled.  Pass it the<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    // log directories.<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    createNewReplicationInstance(conf, this, this.fs, logdir, oldLogDir);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span><a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    // listeners the wal factory will add to wals it creates.<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    final List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;WALActionsListener&gt;();<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    listeners.add(new MetricsWAL());<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>        this.replicationSourceHandler.getWALActionsListener() != null) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      // Replication handler is an implementation of WALActionsListener.<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      listeners.add(this.replicationSourceHandler.getWALActionsListener());<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    }<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span><a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    return new WALFactory(conf, listeners, serverName.toString());<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  /**<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>   * We initialize the roller for the wal that handles meta lazily<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>   * since we don't know if this regionserver will handle it. All calls to<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>   * this method return a reference to the that same roller. As newly referenced<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>   * meta regions are brought online, they will be offered to the roller for maintenance.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>   * As a part of that registration process, the roller will add itself as a<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>   * listener on the wal.<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>   */<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>  protected LogRoller ensureMetaWALRoller() {<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // Using a tmp log roller to ensure metaLogRoller is alive once it is not<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    // null<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    LogRoller roller = metawalRoller.get();<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    if (null == roller) {<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LogRoller tmpLogRoller = new LogRoller(this, this);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>      String n = Thread.currentThread().getName();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      Threads.setDaemonThreadRunning(tmpLogRoller.getThread(),<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          n + "-MetaLogRoller", uncaughtExceptionHandler);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      if (metawalRoller.compareAndSet(null, tmpLogRoller)) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        roller = tmpLogRoller;<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>      } else {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        // Another thread won starting the roller<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>        Threads.shutdown(tmpLogRoller.getThread());<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>        roller = metawalRoller.get();<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    return roller;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>  public MetricsRegionServer getRegionServerMetrics() {<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    return this.metricsRegionServer;<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  /**<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>   * @return Master address tracker instance.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>   */<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>    return this.masterAddressTracker;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>  }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>  /*<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>   * hosting server. Worker logs the exception and exits.<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>   */<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  private void startServiceThreads() throws IOException {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    // Start executor services<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>      conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      this.service.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    }<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    this.service.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>       "hbase.regionserver.wal.max.splitters", SplitLogWorkerCoordination.DEFAULT_MAX_SPLITTERS));<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // Start the threads for compacted files discharger<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    this.service.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>      this.service.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    }<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span><a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    Threads.setDaemonThreadRunning(this.walRoller.getThread(), getName() + ".logRoller",<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        uncaughtExceptionHandler);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    if (this.compactionChecker != null) choreService.scheduleChore(compactionChecker);<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    if (this.periodicFlusher != null) choreService.scheduleChore(periodicFlusher);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    if (this.healthCheckChore != null) choreService.scheduleChore(healthCheckChore);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    if (this.nonceManagerChore != null) choreService.scheduleChore(nonceManagerChore);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    if (this.storefileRefresher != null) choreService.scheduleChore(storefileRefresher);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    if (this.movedRegionsCleaner != null) choreService.scheduleChore(movedRegionsCleaner);<a name="line.1798"></a>
 <span class="sourceLineNo">1799</span><a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        this.replicationSourceHandler != null) {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    } else {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      if (this.replicationSourceHandler != null) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      if (this.replicationSinkHandler != null) {<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>      }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    }<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span><a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    // Create the log splitting worker and start it<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>    sinkConf.setInt("hbase.client.serverside.retries.multiplier", 1);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>    this.splitLogWorker = new SplitLogWorker(this, sinkConf, this, this, walFactory);<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>    splitLogWorker.start();<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span><a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>  /**<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>   * Puts up the webui.<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>   * @return Returns final port -- maybe different from what we started with.<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>   * @throws IOException<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>   */<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>  private int putUpWebUI() throws IOException {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    if(this instanceof HMaster) {<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // -1 is for disabling info server<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    if (port &lt; 0) return port;<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span><a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      String msg =<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Failed to start http info server. Address " + addr<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>              + "hbase.regionserver.info.bindAddress";<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      LOG.error(msg);<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>      throw new IOException(msg);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    // check if auto port bind enabled<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>        false);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    while (true) {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      try {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        infoServer.addServlet("dump", "/dump", getDumpServlet());<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        configureInfoServer();<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        this.infoServer.start();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>        break;<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      } catch (BindException e) {<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        if (!auto) {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          // auto bind disabled throw BindException<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>          throw e;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        }<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        // auto bind enabled, try to use another port<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        port++;<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    port = this.infoServer.getPort();<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    return port;<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  /*<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   * Verify that server is healthy<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   */<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  private boolean isHealthy() {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    if (!fsOk) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      // File system problem<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    // Verify that all threads are alive<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    if (!(leases.isAlive()<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        &amp;&amp; cacheFlusher.isAlive() &amp;&amp; walRoller.isAlive()<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        &amp;&amp; this.compactionChecker.isScheduled()<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        &amp;&amp; this.periodicFlusher.isScheduled())) {<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      stop("One or more threads are no longer alive -- stop");<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      return false;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    final LogRoller metawalRoller = this.metawalRoller.get();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    if (metawalRoller != null &amp;&amp; !metawalRoller.isAlive()) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      stop("Meta WAL roller thread is no longer alive -- stop");<a name="line.1900"></a>
+<span class="sourceLineNo">1800</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    // an unhandled exception, it will just exit.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    Threads.setDaemonThreadRunning(this.leases.getThread(), getName() + ".leaseChecker",<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      uncaughtExceptionHandler);<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        this.replicationSourceHandler != null) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    } else {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      if (this.replicationSourceHandler != null) {<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      }<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      if (this.replicationSinkHandler != null) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    // Create the log splitting worker and start it<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sinkConf.setInt("hbase.client.serverside.retries.multiplier", 1);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    this.splitLogWorker = new SplitLogWorker(this, sinkConf, this, this, walFactory);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>    splitLogWorker.start();<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>  /**<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>   * Puts up the webui.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>   * @return Returns final port -- maybe different from what we started with.<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>   * @throws IOException<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>   */<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>  private int putUpWebUI() throws IOException {<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>    if(this instanceof HMaster) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    // -1 is for disabling info server<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    if (port &lt; 0) return port;<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      String msg =<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Failed to start http info server. Address " + addr<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              + "hbase.regionserver.info.bindAddress";<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>      LOG.error(msg);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>      throw new IOException(msg);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>    // check if auto port bind enabled<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        false);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>    while (true) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      try {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        infoServer.addServlet("dump", "/dump", getDumpServl

<TRUNCATED>

[26/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
index 66dbcf3..7293a11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
@@ -130,7 +130,7 @@
 <span class="sourceLineNo">122</span><a name="line.122"></a>
 <span class="sourceLineNo">123</span>    /** We need to store a copy of the key. */<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    protected byte[] keyBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = null;<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    protected long memstoreTS;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    protected int nextKvOffset;<a name="line.128"></a>
@@ -140,1035 +140,1046 @@
 <span class="sourceLineNo">132</span>    private final ObjectIntPair&lt;ByteBuffer&gt; tmpPair;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    private final boolean includeTags;<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.tmpPair = tmpPair;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.includeTags = includeTags;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected boolean isValid() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return valueOffset != -1;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    protected void invalidate() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      valueOffset = -1;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      tagsCompressedLength = 0;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      uncompressTags = true;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      currentBuffer = null;<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>    protected void ensureSpaceForKey() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // rare case, but we need to handle arbitrary length of key<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          newKeyBufferLength *= 2;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        keyBuffer = newKeyBuffer;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    protected void ensureSpaceForTags() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          newTagsBufferLength *= 2;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        tagsBuffer = newTagsBuffer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      memstoreTS = memTS;<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>    /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     * Copy the state from the next one into this instance (the previous state<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     * seeker to the next key/value.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>     */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else if (!isValid()) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Note: we can only call isValid before we override our state, so this<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // comes before all the assignments at the end of this method.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>             nextState.keyLength);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // don't copy the common prefix between this key and the previous one<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                - nextState.lastCommonPrefix);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentKey = nextState.currentKey;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      valueOffset = nextState.valueOffset;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      keyLength = nextState.keyLength;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      valueLength = nextState.valueLength;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      memstoreTS = nextState.memstoreTS;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      currentBuffer = nextState.currentBuffer;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      tagsOffset = nextState.tagsOffset;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      tagsLength = nextState.tagsLength;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (nextState.tagCompressionContext != null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        tagCompressionContext = nextState.tagCompressionContext;<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>    public Cell toCell() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ByteBuffer valAndTagsBuffer;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      int vOffset;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int valAndTagsLength = this.valueLength;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int tagsLenSerializationSize = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // length<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        int tagsLenSerializationSize) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      int tOffset = 0;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (this.includeTags) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (this.tagCompressionContext == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          tagsArray = valAndTagsBuffer.array();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              + tagsLenSerializationSize;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        } else {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          tOffset = 0;<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>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          tOffset, this.tagsLength);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int tagsLenSerializationSize) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      int tOffset = 0;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.includeTags) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        if (this.tagCompressionContext == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          tagsBuf = valAndTagsBuffer;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        } else {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          tOffset = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * seeker state members for taking a clone.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * represented by the valueOffset and valueLength<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Streamable {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    private byte[] keyOnlyBuffer;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    private short rowLength;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    private int familyOffset;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    private byte familyLength;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    private int qualifierOffset;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    private int qualifierLength;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    private long timestamp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    private byte typeByte;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    private byte[] valueBuffer;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    private int valueOffset;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    private int valueLength;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    private byte[] tagsBuffer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    private int tagsOffset;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    private int tagsLength;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    private long seqId;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        int tagsOffset, int tagsLength) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      this.rowLength = rowLength;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      this.familyOffset = familyOffset;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.familyLength = familyLength;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      this.qualifierOffset = qualOffset;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.qualifierLength = qualLength;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      this.timestamp = timeStamp;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      this.typeByte = typeByte;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      this.valueBuffer = valueBuffer;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.valueOffset = valueOffset;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.valueLength = valueLen;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.tagsBuffer = tagsBuffer;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.tagsOffset = tagsOffset;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.tagsLength = tagsLength;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      setSequenceId(seqId);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public byte[] getRowArray() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return keyOnlyBuffer;<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>    @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public byte[] getFamilyArray() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return keyOnlyBuffer;<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>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public byte[] getQualifierArray() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return keyOnlyBuffer;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public int getRowOffset() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return Bytes.SIZEOF_SHORT;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public short getRowLength() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return rowLength;<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>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public int getFamilyOffset() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return familyOffset;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public byte getFamilyLength() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return familyLength;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public int getQualifierOffset() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return qualifierOffset;<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public int getQualifierLength() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return qualifierLength;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public long getTimestamp() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      return timestamp;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public byte getTypeByte() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return typeByte;<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>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public long getSequenceId() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return seqId;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public byte[] getValueArray() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return this.valueBuffer;<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>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public int getValueOffset() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return valueOffset;<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>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public int getValueLength() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return valueLength;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    public byte[] getTagsArray() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      return this.tagsBuffer;<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>    @Override<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    public int getTagsOffset() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return this.tagsOffset;<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>    @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    public int getTagsLength() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return tagsLength;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    @Override<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    public String toString() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.427"></a>
+<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        boolean tagsCompressed) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.tmpPair = tmpPair;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.includeTags = includeTags;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      if (tagsCompressed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        tagsBuffer = HConstants.EMPTY_BYTE_ARRAY;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    protected boolean isValid() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return valueOffset != -1;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    protected void invalidate() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      valueOffset = -1;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      tagsCompressedLength = 0;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      uncompressTags = true;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      currentBuffer = null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    protected void ensureSpaceForKey() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        // rare case, but we need to handle arbitrary length of key<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          newKeyBufferLength *= 2;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        keyBuffer = newKeyBuffer;<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><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    protected void ensureSpaceForTags() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          newTagsBufferLength *= 2;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        tagsBuffer = newTagsBuffer;<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><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      memstoreTS = memTS;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>     * Copy the state from the next one into this instance (the previous state<a name="line.190"></a>
+<span class="sourceLineNo">191</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.191"></a>
+<span class="sourceLineNo">192</span>     * seeker to the next key/value.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else if (!isValid()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        // Note: we can only call isValid before we override our state, so this<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // comes before all the assignments at the end of this method.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>             nextState.keyLength);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        // don't copy the common prefix between this key and the previous one<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                - nextState.lastCommonPrefix);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentKey = nextState.currentKey;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      valueOffset = nextState.valueOffset;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      keyLength = nextState.keyLength;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      valueLength = nextState.valueLength;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      memstoreTS = nextState.memstoreTS;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      currentBuffer = nextState.currentBuffer;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      tagsOffset = nextState.tagsOffset;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      tagsLength = nextState.tagsLength;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (nextState.tagCompressionContext != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tagCompressionContext = nextState.tagCompressionContext;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public Cell toCell() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      ByteBuffer valAndTagsBuffer;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      int vOffset;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      int valAndTagsLength = this.valueLength;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int tagsLenSerializationSize = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        // length<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<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><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        int tagsLenSerializationSize) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      int tOffset = 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (this.includeTags) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (this.tagCompressionContext == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          tagsArray = valAndTagsBuffer.array();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              + tagsLenSerializationSize;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          tOffset = 0;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          tOffset, this.tagsLength);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        int tagsLenSerializationSize) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      int tOffset = 0;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      if (this.includeTags) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        if (this.tagCompressionContext == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          tagsBuf = valAndTagsBuffer;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          tOffset = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * seeker state members for taking a clone.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * represented by the valueOffset and valueLength<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      Streamable {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    private byte[] keyOnlyBuffer;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    private short rowLength;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    private int familyOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    private byte familyLength;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private int qualifierOffset;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    private int qualifierLength;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private long timestamp;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private byte typeByte;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    private byte[] valueBuffer;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    private int valueOffset;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    private int valueLength;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    private byte[] tagsBuffer;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    private int tagsOffset;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    private int tagsLength;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    private long seqId;<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int tagsOffset, int tagsLength) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      this.rowLength = rowLength;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      this.familyOffset = familyOffset;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      this.familyLength = familyLength;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.qualifierOffset = qualOffset;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.qualifierLength = qualLength;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.timestamp = timeStamp;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.typeByte = typeByte;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.valueBuffer = valueBuffer;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.valueOffset = valueOffset;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.valueLength = valueLen;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.tagsBuffer = tagsBuffer;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.tagsOffset = tagsOffset;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.tagsLength = tagsLength;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setSequenceId(seqId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    public byte[] getRowArray() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return keyOnlyBuffer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public byte[] getFamilyArray() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return keyOnlyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    @Override<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public byte[] getQualifierArray() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return keyOnlyBuffer;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public int getRowOffset() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return Bytes.SIZEOF_SHORT;<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>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public short getRowLength() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return rowLength;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    public int getFamilyOffset() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return familyOffset;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public byte getFamilyLength() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return familyLength;<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public int getQualifierOffset() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return qualifierOffset;<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>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public int getQualifierLength() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return qualifierLength;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    public long getTimestamp() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return timestamp;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    public byte getTypeByte() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return typeByte;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public long getSequenceId() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return seqId;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public byte[] getValueArray() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return this.valueBuffer;<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>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public int getValueOffset() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      return valueOffset;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    public int getValueLength() {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return valueLength;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public byte[] getTagsArray() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return this.tagsBuffer;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public int getTagsOffset() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return this.tagsOffset;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public int getTagsLength() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return tagsLength;<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>    @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    public void setSequenceId(long seqId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.seqId = seqId;<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>    @Override<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public long heapSize() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    public int write(OutputStream out) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return write(out, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          tagsLength, withTags);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // Write key<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      out.write(keyOnlyBuffer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // Write value<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (withTags) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        // 2 bytes tags length followed by tags bytes<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      SettableSequenceId, Streamable {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.BYTE_BUFFER));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private ByteBuffer keyBuffer;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    private short rowLength;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    private int familyOffset;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private byte familyLength;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private int qualifierOffset;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    private int qualifierLength;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private long timestamp;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    private byte typeByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private ByteBuffer valueBuffer;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    private int valueOffset;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    private int valueLength;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    private ByteBuffer tagsBuffer;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    private int tagsOffset;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    private int tagsLength;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    private long seqId;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    protected OffheapDecodedCell(ByteBuffer keyBuffer, short rowLength, int familyOffset,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        ByteBuffer valueBuffer, int valueOffset, int valueLen, long seqId, ByteBuffer tagsBuffer,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        int tagsOffset, int tagsLength) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // The keyBuffer is always onheap<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      assert keyBuffer.hasArray();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      assert keyBuffer.arrayOffset() == 0;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this.keyBuffer = keyBuffer;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.rowLength = rowLength;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      this.familyOffset = familyOffset;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      this.familyLength = familyLength;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.qualifierOffset = qualOffset;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.qualifierLength = qualLength;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.timestamp = timeStamp;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.typeByte = typeByte;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.valueBuffer = valueBuffer;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.valueOffset = valueOffset;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      this.valueLength = valueLen;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      this.tagsBuffer = tagsBuffer;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.tagsOffset = tagsOffset;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.tagsLength = tagsLength;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      setSequenceId(seqId);<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>    @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public byte[] getRowArray() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      return this.keyBuffer.array();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public int getRowOffset() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return getRowPosition();<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>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public short getRowLength() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.rowLength;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public byte[] getFamilyArray() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.keyBuffer.array();<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>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public int getFamilyOffset() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      return getFamilyPosition();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public byte getFamilyLength() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.familyLength;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public byte[] getQualifierArray() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.keyBuffer.array();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @Override<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    public int getQualifierOffset() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return getQualifierPosition();<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>    @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    public int getQualifierLength() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.qualifierLength;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public long getTimestamp() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.timestamp;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public byte getTypeByte() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      return this.typeByte;<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>    @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    public long getSequenceId() {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      return this.seqId;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    public byte[] getValueArray() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      return CellUtil.cloneValue(this);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public int getValueOffset() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      return 0;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>    @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    public int getValueLength() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.valueLength;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    public byte[] getTagsArray() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return CellUtil.cloneTags(this);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    public int getTagsOffset() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return 0;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public int getTagsLength() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      return this.tagsLength;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    public ByteBuffer getRowByteBuffer() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.keyBuffer;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    public int getRowPosition() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      return Bytes.SIZEOF_SHORT;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    public ByteBuffer getFamilyByteBuffer() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return this.keyBuffer;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    @Override<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    public int getFamilyPosition() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.familyOffset;<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>    @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    public ByteBuffer getQualifierByteBuffer() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return this.keyBuffer;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>    @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    public int getQualifierPosition() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      return this.qualifierOffset;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    @Override<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    public ByteBuffer getValueByteBuffer() {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.valueBuffer;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    @Override<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public int getValuePosition() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return this.valueOffset;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    @Override<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    public ByteBuffer getTagsByteBuffer() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      return this.tagsBuffer;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    @Override<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    public int getTagsPosition() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.tagsOffset;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public long heapSize() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>    @Override<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    public void setSequenceId(long seqId) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      this.seqId = seqId;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    @Override<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    public int write(OutputStream out) throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return write(out, true);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          tagsLength, withTags);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      ByteBufferUtils.putInt(out, keyBuffer.capacity());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Write key<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      out.write(keyBuffer.array());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Write value<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      ByteBufferUtils.copyBufferToStream(out, this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (withTags) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // 2 bytes tags length followed by tags bytes<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        ByteBufferUtils.copyBufferToStream(out, this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      return lenToWrite + Bytes.SIZEOF_INT;<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>  protected abstract static class<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      BufferedEncodedSeeker&lt;STATE extends SeekerState&gt;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      implements EncodedSeeker {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    protected HFileBlockDecodingContext decodingCtx;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    protected final CellComparator comparator;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    protected ByteBuff currentBuffer;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    protected TagCompressionContext tagCompressionContext = null;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    protected  KeyValue.KeyOnlyKeyValue keyOnlyKV = new KeyValue.KeyOnlyKeyValue();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // many object creations.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    protected STATE current, previous;<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    public BufferedEncodedSeeker(CellComparator comparator,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        HFileBlockDecodingContext decodingCtx) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      this.comparator = comparator;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      this.decodingCtx = decodingCtx;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (decodingCtx.getHFileContext().isCompressTags()) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        try {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          tagCompressionContext = new TagCompressionContext(LRUDictionary.class, Byte.MAX_VALUE);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        } catch (Exception e) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          throw new RuntimeException("Failed to initialize TagCompressionContext", e);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      current = createSeekerState(); // always valid<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      previous = createSeekerState(); // may not be valid<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    protected boolean includesMvcc() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    protected boolean includesTags() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    @Override<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    public int compareKey(CellComparator comparator, Cell key) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      keyOnlyKV.setKey(current.keyBuffer, 0, current.keyLength);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      return comparator.compareKeyIgnoresMvcc(key, keyOnlyKV);<a name="line.730"></a>
+<span class="sourceLineNo">431</span>    public String toString() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    public void setSequenceId(long seqId) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      this.seqId = seqId;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public long heapSize() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<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>    @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    public int write(OutputStream out) throws IOException {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return write(out, true);<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>    @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          tagsLength, withTags);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      // Write key<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      out.write(keyOnlyBuffer);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      // Write value<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (withTags) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        // 2 bytes tags length followed by tags bytes<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      SettableSequenceId, Streamable {<a name

<TRUNCATED>

[06/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
index c154ac3..151e788 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
@@ -35,1152 +35,1172 @@
 <span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.FileStatus;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.errorhandling.ForeignException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.MetricsMaster;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.SnapshotSentinel;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.RestoreSnapshotProcedure;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManager;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.procedure.Procedure;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.procedure.ProcedureCoordinator;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure.ZKProcedureCoordinatorRpcs;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameStringPair;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription.Type;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.security.User;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.snapshot.HBaseSnapshotException;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.snapshot.SnapshotDoesNotExistException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.snapshot.SnapshotExistsException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.snapshot.SnapshotManifest;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.snapshot.SnapshotReferenceUtil;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.snapshot.TablePartiallyOpenException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.snapshot.UnknownSnapshotException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.zookeeper.KeeperException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>/**<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * This class manages the procedure of taking and restoring snapshots. There is only one<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * SnapshotManager for the master.<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * The class provides methods for monitoring in-progress snapshot actions.<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * &lt;p&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * Note: Currently there can only be one snapshot being taken at a time over the cluster. This is a<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * simplification in the current implementation.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>@InterfaceStability.Unstable<a name="line.99"></a>
-<span class="sourceLineNo">100</span>public class SnapshotManager extends MasterProcedureManager implements Stoppable {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static final Log LOG = LogFactory.getLog(SnapshotManager.class);<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /** By default, check to see if the snapshot is complete every WAKE MILLIS (ms) */<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private static final int SNAPSHOT_WAKE_MILLIS_DEFAULT = 500;<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  /**<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Wait time before removing a finished sentinel from the in-progress map<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * NOTE: This is used as a safety auto cleanup.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * The snapshot and restore handlers map entries are removed when a user asks if a snapshot or<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * restore is completed. This operation is part of the HBaseAdmin snapshot/restore API flow.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * In case something fails on the client side and the snapshot/restore state is not reclaimed<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * after a default timeout, the entry is removed from the in-progress map.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * At this point, if the user asks for the snapshot/restore status, the result will be<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * snapshot done if exists or failed if it doesn't exists.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final int SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT = 60 * 1000;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /** Enable or disable snapshot support */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final String HBASE_SNAPSHOT_ENABLED = "hbase.snapshot.enabled";<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Conf key for # of ms elapsed between checks for snapshot errors while waiting for<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * completion.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private static final String SNAPSHOT_WAKE_MILLIS_KEY = "hbase.snapshot.master.wakeMillis";<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  /** Name of the operation to use in the controller */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public static final String ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION = "online-snapshot";<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /** Conf key for # of threads used by the SnapshotManager thread pool */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private static final String SNAPSHOT_POOL_THREADS_KEY = "hbase.snapshot.master.threads";<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  /** number of current operations running on the master */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private static final int SNAPSHOT_POOL_THREADS_DEFAULT = 1;<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private boolean stopped;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private MasterServices master;  // Needed by TableEventHandlers<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private ProcedureCoordinator coordinator;<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Is snapshot feature enabled?<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private boolean isSnapshotSupported = false;<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  // Snapshot handlers map, with table name as key.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  // The map is always accessed and modified under the object lock using synchronized.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  // snapshotTable() will insert an Handler in the table.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  // isSnapshotDone() will remove the handler requested if the operation is finished.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private Map&lt;TableName, SnapshotSentinel&gt; snapshotHandlers =<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      new HashMap&lt;TableName, SnapshotSentinel&gt;();<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  // Restore map, with table name as key, procedure ID as value.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  // The map is always accessed and modified under the object lock using synchronized.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  // restoreSnapshot()/cloneSnapshot() will insert a procedure ID in the map.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  //<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  // TODO: just as the Apache HBase 1.x implementation, this map would not survive master<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  // restart/failover. This is just a stopgap implementation until implementation of taking<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  // snapshot using Procedure-V2.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private Map&lt;TableName, Long&gt; restoreTableToProcIdMap = new HashMap&lt;TableName, Long&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private Path rootDir;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private ExecutorService executorService;<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  public SnapshotManager() {}<a name="line.163"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.Log;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.commons.logging.LogFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<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.HTableDescriptor;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.Stoppable;<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.classification.InterfaceAudience;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.errorhandling.ForeignException;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.MetricsMaster;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.SnapshotSentinel;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.master.procedure.RestoreSnapshotProcedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManager;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure.Procedure;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure.ProcedureCoordinator;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.procedure.ZKProcedureCoordinatorRpcs;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameStringPair;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription.Type;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.security.User;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.snapshot.HBaseSnapshotException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.snapshot.SnapshotDoesNotExistException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.snapshot.SnapshotExistsException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.snapshot.SnapshotManifest;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.snapshot.SnapshotReferenceUtil;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.snapshot.TablePartiallyOpenException;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.snapshot.UnknownSnapshotException;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.KeyLocker;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.zookeeper.KeeperException;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>/**<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * This class manages the procedure of taking and restoring snapshots. There is only one<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * SnapshotManager for the master.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * &lt;p&gt;<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * The class provides methods for monitoring in-progress snapshot actions.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * &lt;p&gt;<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * Note: Currently there can only be one snapshot being taken at a time over the cluster. This is a<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * simplification in the current implementation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.103"></a>
+<span class="sourceLineNo">104</span>@InterfaceStability.Unstable<a name="line.104"></a>
+<span class="sourceLineNo">105</span>public class SnapshotManager extends MasterProcedureManager implements Stoppable {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static final Log LOG = LogFactory.getLog(SnapshotManager.class);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /** By default, check to see if the snapshot is complete every WAKE MILLIS (ms) */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private static final int SNAPSHOT_WAKE_MILLIS_DEFAULT = 500;<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>   * Wait time before removing a finished sentinel from the in-progress map<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   *<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * NOTE: This is used as a safety auto cleanup.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * The snapshot and restore handlers map entries are removed when a user asks if a snapshot or<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * restore is completed. This operation is part of the HBaseAdmin snapshot/restore API flow.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * In case something fails on the client side and the snapshot/restore state is not reclaimed<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * after a default timeout, the entry is removed from the in-progress map.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * At this point, if the user asks for the snapshot/restore status, the result will be<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * snapshot done if exists or failed if it doesn't exists.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private static final int SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT = 60 * 1000;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  /** Enable or disable snapshot support */<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String HBASE_SNAPSHOT_ENABLED = "hbase.snapshot.enabled";<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * Conf key for # of ms elapsed between checks for snapshot errors while waiting for<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * completion.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static final String SNAPSHOT_WAKE_MILLIS_KEY = "hbase.snapshot.master.wakeMillis";<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /** Name of the operation to use in the controller */<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public static final String ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION = "online-snapshot";<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /** Conf key for # of threads used by the SnapshotManager thread pool */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  private static final String SNAPSHOT_POOL_THREADS_KEY = "hbase.snapshot.master.threads";<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  /** number of current operations running on the master */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private static final int SNAPSHOT_POOL_THREADS_DEFAULT = 1;<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private boolean stopped;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private MasterServices master;  // Needed by TableEventHandlers<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private ProcedureCoordinator coordinator;<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  // Is snapshot feature enabled?<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private boolean isSnapshotSupported = false;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  // Snapshot handlers map, with table name as key.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  // The map is always accessed and modified under the object lock using synchronized.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  // snapshotTable() will insert an Handler in the table.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  // isSnapshotDone() will remove the handler requested if the operation is finished.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private Map&lt;TableName, SnapshotSentinel&gt; snapshotHandlers =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      new HashMap&lt;TableName, SnapshotSentinel&gt;();<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  // Restore map, with table name as key, procedure ID as value.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  // The map is always accessed and modified under the object lock using synchronized.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  // restoreSnapshot()/cloneSnapshot() will insert a procedure ID in the map.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  //<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  // TODO: just as the Apache HBase 1.x implementation, this map would not survive master<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  // restart/failover. This is just a stopgap implementation until implementation of taking<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  // snapshot using Procedure-V2.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private Map&lt;TableName, Long&gt; restoreTableToProcIdMap = new HashMap&lt;TableName, Long&gt;();<a name="line.163"></a>
 <span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * Fully specify all necessary components of a snapshot manager. Exposed for testing.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @param master services for the master where the manager is running<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param coordinator procedure coordinator instance.  exposed for testing.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * @param pool HBase ExecutorServcie instance, exposed for testing.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public SnapshotManager(final MasterServices master, final MetricsMaster metricsMaster,<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      ProcedureCoordinator coordinator, ExecutorService pool)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      throws IOException, UnsupportedOperationException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    this.master = master;<a name="line.174"></a>
+<span class="sourceLineNo">165</span>  private Path rootDir;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private ExecutorService executorService;<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *  Locks for snapshot operations<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   *  key is snapshot's filename in progress, value is the related lock<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   *    - create snapshot<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   *    - SnapshotCleaner<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  private KeyLocker&lt;String&gt; locks = new KeyLocker&lt;String&gt;();<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    this.rootDir = master.getMasterFileSystem().getRootDir();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    checkSnapshotSupport(master.getConfiguration(), master.getMasterFileSystem());<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.coordinator = coordinator;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.executorService = pool;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    resetTempDir();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Gets the list of all completed snapshots.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @return list of SnapshotDescriptions<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @throws IOException File system exception<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public List&lt;SnapshotDescription&gt; getCompletedSnapshots() throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    return getCompletedSnapshots(SnapshotDescriptionUtils.getSnapshotsDir(rootDir));<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>   * Gets the list of all completed snapshots.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * @param snapshotDir snapshot directory<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @return list of SnapshotDescriptions<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * @throws IOException File system exception<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private List&lt;SnapshotDescription&gt; getCompletedSnapshots(Path snapshotDir) throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    List&lt;SnapshotDescription&gt; snapshotDescs = new ArrayList&lt;SnapshotDescription&gt;();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // first create the snapshot root path and check to see if it exists<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    FileSystem fs = master.getMasterFileSystem().getFileSystem();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (snapshotDir == null) snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // if there are no snapshots, return an empty list<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (!fs.exists(snapshotDir)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return snapshotDescs;<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>    // ignore all the snapshots in progress<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    FileStatus[] snapshots = fs.listStatus(snapshotDir,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      new SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter(fs));<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    MasterCoprocessorHost cpHost = master.getMasterCoprocessorHost();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // loop through all the completed snapshots<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for (FileStatus snapshot : snapshots) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      Path info = new Path(snapshot.getPath(), SnapshotDescriptionUtils.SNAPSHOTINFO_FILE);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      // if the snapshot is bad<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      if (!fs.exists(info)) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        LOG.error("Snapshot information for " + snapshot.getPath() + " doesn't exist");<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        continue;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      FSDataInputStream in = null;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      try {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        in = fs.open(info);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        SnapshotDescription desc = SnapshotDescription.parseFrom(in);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        if (cpHost != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            cpHost.preListSnapshot(desc);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          } catch (AccessDeniedException e) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            LOG.warn("Current user does not have access to " + desc.getName() + " snapshot. "<a name="line.230"></a>
-<span class="sourceLineNo">231</span>                + "Either you should be owner of this snapshot or admin user.");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            // Skip this and try for next snapshot<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            continue;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        snapshotDescs.add(desc);<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>        // call coproc post hook<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (cpHost != null) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          cpHost.postListSnapshot(desc);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } catch (IOException e) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        LOG.warn("Found a corrupted snapshot " + snapshot.getPath(), e);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } finally {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        if (in != null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          in.close();<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>
-<span class="sourceLineNo">250</span>    return snapshotDescs;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  public SnapshotManager() {}<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>   * Fully specify all necessary components of a snapshot manager. Exposed for testing.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param master services for the master where the manager is running<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @param coordinator procedure coordinator instance.  exposed for testing.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @param pool HBase ExecutorServcie instance, exposed for testing.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public SnapshotManager(final MasterServices master, final MetricsMaster metricsMaster,<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      ProcedureCoordinator coordinator, ExecutorService pool)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      throws IOException, UnsupportedOperationException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.master = master;<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.rootDir = master.getMasterFileSystem().getRootDir();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    checkSnapshotSupport(master.getConfiguration(), master.getMasterFileSystem());<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.coordinator = coordinator;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.executorService = pool;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    resetTempDir();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * Gets the list of all completed snapshots.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @return list of SnapshotDescriptions<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @throws IOException File system exception<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public List&lt;SnapshotDescription&gt; getCompletedSnapshots() throws IOException {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    return getCompletedSnapshots(SnapshotDescriptionUtils.getSnapshotsDir(rootDir));<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>  /**<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * Gets the list of all completed snapshots.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * @param snapshotDir snapshot directory<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @return list of SnapshotDescriptions<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws IOException File system exception<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  private List&lt;SnapshotDescription&gt; getCompletedSnapshots(Path snapshotDir) throws IOException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    List&lt;SnapshotDescription&gt; snapshotDescs = new ArrayList&lt;SnapshotDescription&gt;();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // first create the snapshot root path and check to see if it exists<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    FileSystem fs = master.getMasterFileSystem().getFileSystem();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (snapshotDir == null) snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // if there are no snapshots, return an empty list<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    if (!fs.exists(snapshotDir)) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return snapshotDescs;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    // ignore all the snapshots in progress<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    FileStatus[] snapshots = fs.listStatus(snapshotDir,<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      new SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter(fs));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    MasterCoprocessorHost cpHost = master.getMasterCoprocessorHost();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // loop through all the completed snapshots<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    for (FileStatus snapshot : snapshots) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Path info = new Path(snapshot.getPath(), SnapshotDescriptionUtils.SNAPSHOTINFO_FILE);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // if the snapshot is bad<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (!fs.exists(info)) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.error("Snapshot information for " + snapshot.getPath() + " doesn't exist");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        continue;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      FSDataInputStream in = null;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      try {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        in = fs.open(info);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        SnapshotDescription desc = SnapshotDescription.parseFrom(in);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        if (cpHost != null) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          try {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>            cpHost.preListSnapshot(desc);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          } catch (AccessDeniedException e) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            LOG.warn("Current user does not have access to " + desc.getName() + " snapshot. "<a name="line.245"></a>
+<span class="sourceLineNo">246</span>                + "Either you should be owner of this snapshot or admin user.");<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            // Skip this and try for next snapshot<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            continue;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        snapshotDescs.add(desc);<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Cleans up any snapshots in the snapshot/.tmp directory that were left from failed<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * snapshot attempts.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   *<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @throws IOException if we can't reach the filesystem<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  void resetTempDir() throws IOException {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // cleanup any existing snapshots.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    Path tmpdir = SnapshotDescriptionUtils.getWorkingSnapshotDir(rootDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (master.getMasterFileSystem().getFileSystem().exists(tmpdir)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (!master.getMasterFileSystem().getFileSystem().delete(tmpdir, true)) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        LOG.warn("Couldn't delete working snapshot directory: " + tmpdir);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Delete the specified snapshot<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param snapshot<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @throws SnapshotDoesNotExistException If the specified snapshot does not exist.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @throws IOException For filesystem IOExceptions<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public void deleteSnapshot(SnapshotDescription snapshot) throws SnapshotDoesNotExistException, IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // check to see if it is completed<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (!isSnapshotCompleted(snapshot)) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      throw new SnapshotDoesNotExistException(ProtobufUtil.createSnapshotDesc(snapshot));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    String snapshotName = snapshot.getName();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    // first create the snapshot description and check to see if it exists<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    FileSystem fs = master.getMasterFileSystem().getFileSystem();<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // Get snapshot info from file system. The one passed as parameter is a "fake" snapshotInfo with<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    // just the "name" and it does not contains the "real" snapshot information<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    snapshot = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir);<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>    // call coproc pre hook<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    MasterCoprocessorHost cpHost = master.getMasterCoprocessorHost();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    if (cpHost != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      cpHost.preDeleteSnapshot(snapshot);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>    LOG.debug("Deleting snapshot: " + snapshotName);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    // delete the existing snapshot<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (!fs.delete(snapshotDir, true)) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new HBaseSnapshotException("Failed to delete snapshot directory: " + snapshotDir);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    // call coproc post hook<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (cpHost != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      cpHost.postDeleteSnapshot(snapshot);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * Check if the specified snapshot is done<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   *<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @param expected<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @return true if snapshot is ready to be restored, false if it is still being taken.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @throws IOException IOException if error from HDFS or RPC<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @throws UnknownSnapshotException if snapshot is invalid or does not exist.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public boolean isSnapshotDone(SnapshotDescription expected) throws IOException {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // check the request to make sure it has a snapshot<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (expected == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      throw new UnknownSnapshotException(<a name="line.319"></a>
-<span class="sourceLineNo">320</span>         "No snapshot name passed in request, can't figure out which snapshot you want to check.");<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">253</span>        // call coproc post hook<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        if (cpHost != null) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          cpHost.postListSnapshot(desc);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      } catch (IOException e) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        LOG.warn("Found a corrupted snapshot " + snapshot.getPath(), e);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        if (in != null) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          in.close();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return snapshotDescs;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * Cleans up any snapshots in the snapshot/.tmp directory that were left from failed<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * snapshot attempts.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   *<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @throws IOException if we can't reach the filesystem<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  void resetTempDir() throws IOException {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    // cleanup any existing snapshots.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Path tmpdir = SnapshotDescriptionUtils.getWorkingSnapshotDir(rootDir);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    if (master.getMasterFileSystem().getFileSystem().exists(tmpdir)) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      if (!master.getMasterFileSystem().getFileSystem().delete(tmpdir, true)) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        LOG.warn("Couldn't delete working snapshot directory: " + tmpdir);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * Delete the specified snapshot<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * @param snapshot<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @throws SnapshotDoesNotExistException If the specified snapshot does not exist.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @throws IOException For filesystem IOExceptions<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public void deleteSnapshot(SnapshotDescription snapshot) throws SnapshotDoesNotExistException, IOException {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    // check to see if it is completed<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    if (!isSnapshotCompleted(snapshot)) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      throw new SnapshotDoesNotExistException(ProtobufUtil.createSnapshotDesc(snapshot));<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    String snapshotName = snapshot.getName();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    // first create the snapshot description and check to see if it exists<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    FileSystem fs = master.getMasterFileSystem().getFileSystem();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    // Get snapshot info from file system. The one passed as parameter is a "fake" snapshotInfo with<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    // just the "name" and it does not contains the "real" snapshot information<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    snapshot = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir);<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // call coproc pre hook<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    MasterCoprocessorHost cpHost = master.getMasterCoprocessorHost();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (cpHost != null) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      cpHost.preDeleteSnapshot(snapshot);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    LOG.debug("Deleting snapshot: " + snapshotName);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    // delete the existing snapshot<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    if (!fs.delete(snapshotDir, true)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      throw new HBaseSnapshotException("Failed to delete snapshot directory: " + snapshotDir);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>    // call coproc post hook<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (cpHost != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      cpHost.postDeleteSnapshot(snapshot);<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>  }<a name="line.321"></a>
 <span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>    String ssString = ClientSnapshotDescriptionUtils.toString(expected);<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    // check to see if the sentinel exists,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // and if the task is complete removes it from the in-progress snapshots map.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    SnapshotSentinel handler = removeSentinelIfFinished(this.snapshotHandlers, expected);<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    // stop tracking "abandoned" handlers<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    cleanupSentinels();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>    if (handler == null) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      // If there's no handler in the in-progress map, it means one of the following:<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      //   - someone has already requested the snapshot state<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      //   - the requested snapshot was completed long time ago (cleanupSentinels() timeout)<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      //   - the snapshot was never requested<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // In those cases returns to the user the "done state" if the snapshots exists on disk,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      // otherwise raise an exception saying that the snapshot is not running and doesn't exist.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      if (!isSnapshotCompleted(expected)) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        throw new UnknownSnapshotException("Snapshot " + ssString<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            + " is not currently running or one of the known completed snapshots.");<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      // was done, return true;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      return true;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * Check if the specified snapshot is done<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   *<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @param expected<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @return true if snapshot is ready to be restored, false if it is still being taken.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * @throws IOException IOException if error from HDFS or RPC<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @throws UnknownSnapshotException if snapshot is invalid or does not exist.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  public boolean isSnapshotDone(SnapshotDescription expected) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // check the request to make sure it has a snapshot<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (expected == null) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      throw new UnknownSnapshotException(<a name="line.334"></a>
+<span class="sourceLineNo">335</span>         "No snapshot name passed in request, can't figure out which snapshot you want to check.");<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String ssString = ClientSnapshotDescriptionUtils.toString(expected);<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    // check to see if the sentinel exists,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    // and if the task is complete removes it from the in-progress snapshots map.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    SnapshotSentinel handler = removeSentinelIfFinished(this.snapshotHandlers, expected);<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // stop tracking "abandoned" handlers<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    cleanupSentinels();<a name="line.345"></a>
 <span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>    // pass on any failure we find in the sentinel<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    try {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      handler.rethrowExceptionIfFailed();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    } catch (ForeignException e) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      // Give some procedure info on an exception.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      String status;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      Procedure p = coordinator.getProcedure(expected.getName());<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (p != null) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        status = p.getStatus();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      } else {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        status = expected.getName() + " not found in proclist " + coordinator.getProcedureNames();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      throw new HBaseSnapshotException("Snapshot " + ssString +  " had an error.  " + status, e,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        ProtobufUtil.createSnapshotDesc(expected));<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // check to see if we are done<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    if (handler.isFinished()) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      LOG.debug("Snapshot '" + ssString + "' has completed, notifying client.");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return true;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (LOG.isDebugEnabled()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.debug("Snapshoting '" + ssString + "' is still in progress!");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return false;<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>   * Check to see if there is a snapshot in progress with the same name or on the same table.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * Currently we have a limitation only allowing a single snapshot per table at a time. Also we<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * don't allow snapshot with the same name.<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @param snapshot description of the snapshot being checked.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if there is a snapshot in progress with the same name or on the same<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   *         table.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  synchronized boolean isTakingSnapshot(final SnapshotDescription snapshot) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    TableName snapshotTable = TableName.valueOf(snapshot.getTable());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (isTakingSnapshot(snapshotTable)) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return true;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    Iterator&lt;Map.Entry&lt;TableName, SnapshotSentinel&gt;&gt; it = this.snapshotHandlers.entrySet().iterator();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    while (it.hasNext()) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      Map.Entry&lt;TableName, SnapshotSentinel&gt; entry = it.next();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      SnapshotSentinel sentinel = entry.getValue();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (snapshot.getName().equals(sentinel.getSnapshot().getName()) &amp;&amp; !sentinel.isFinished()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        return true;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return false;<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>   * Check to see if the specified table has a snapshot in progress.  Currently we have a<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * limitation only allowing a single snapshot per table at a time.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param tableName name of the table being snapshotted.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if there is a snapshot in progress on the specified table.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  synchronized boolean isTakingSnapshot(final TableName tableName) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    SnapshotSentinel handler = this.snapshotHandlers.get(tableName);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    return handler != null &amp;&amp; !handler.isFinished();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * Check to make sure that we are OK to run the passed snapshot. Checks to make sure that we<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * aren't already running a snapshot or restore on the requested table.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * @param snapshot description of the snapshot we want to start<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @throws HBaseSnapshotException if the filesystem could not be prepared to start the snapshot<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private synchronized void prepareToTakeSnapshot(SnapshotDescription snapshot)<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      throws HBaseSnapshotException {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    FileSystem fs = master.getMasterFileSystem().getFileSystem();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    TableName snapshotTable =<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        TableName.valueOf(snapshot.getTable());<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    // make sure we aren't already running a snapshot<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (isTakingSnapshot(snapshot)) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      SnapshotSentinel handler = this.snapshotHandlers.get(snapshotTable);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      throw new SnapshotCreationException("Rejected taking "<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          + " because we are already running another snapshot "<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + (handler != null ? ("on the same table " +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>              ClientSnapshotDescriptionUtils.toString(handler.getSnapshot()))<a name="line.428"></a>
-<span class="sourceLineNo">429</span>              : "with the same name"), ProtobufUtil.createSnapshotDesc(snapshot));<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>    // make sure we aren't running a restore on the same table<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    if (isRestoringTable(snapshotTable)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      throw new SnapshotCreationException("Rejected taking "<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          + " because we are already have a restore in progress on the same snapshot.");<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>    try {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // delete the working directory, since we aren't running the snapshot. Likely leftovers<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      // from a failed attempt.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      fs.delete(workingDir, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // recreate the working directory for the snapshot<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      if (!fs.mkdirs(workingDir)) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        throw new SnapshotCreationException(<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            "Couldn't create working directory (" + workingDir + ") for snapshot",<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            ProtobufUtil.createSnapshotDesc(snapshot));<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    } catch (HBaseSnapshotException e) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      throw e;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    } catch (IOException e) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      throw new SnapshotCreationException(<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          "Exception while checking to see if snapshot could be started.", e,<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          ProtobufUtil.createSnapshotDesc(snapshot));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">347</span>    if (handler == null) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      // If there's no handler in the in-progress map, it means one of the following:<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      //   - someone has already requested the snapshot state<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      //   - the requested snapshot was completed long time ago (cleanupSentinels() timeout)<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      //   - the snapshot was never requested<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // In those cases returns to the user the "done state" if the snapshots exists on disk,<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      // otherwise raise an exception saying that the snapshot is not running and doesn't exist.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      if (!isSnapshotCompleted(expected)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        throw new UnknownSnapshotException("Snapshot " + ssString<a name="line.355"></a>
+<span class="sourceLineNo">356</span>            + " is not currently running or one of the known completed snapshots.");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      // was done, return true;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return true;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>    // pass on any failure we find in the sentinel<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    try {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      handler.rethrowExceptionIfFailed();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    } catch (ForeignException e) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      // Give some procedure info on an exception.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      String status;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      Procedure p = coordinator.getProcedure(expected.getName());<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      if (p != null) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        status = p.getStatus();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      } else {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        status = expected.getName() + " not found in proclist " + coordinator.getProcedureNames();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      throw new HBaseSnapshotException("Snapshot " + ssString +  " had an error.  " + status, e,<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        ProtobufUtil.createSnapshotDesc(expected));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    // check to see if we are done<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (handler.isFinished()) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      LOG.debug("Snapshot '" + ssString + "' has completed, notifying client.");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      return true;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (LOG.isDebugEnabled()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.debug("Snapshoting '" + ssString + "' is still in progress!");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return false;<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>   * Check to see if there is a snapshot in progress with the same name or on the same table.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Currently we have a limitation only allowing a single snapshot per table at a time. Also we<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * don't allow snapshot with the same name.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param snapshot description of the snapshot being checked.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if there is a snapshot in progress with the same name or on the same<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   *         table.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  synchronized boolean isTakingSnapshot(final SnapshotDescription snapshot) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    TableName snapshotTable = TableName.valueOf(snapshot.getTable());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    if (isTakingSnapshot(snapshotTable)) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      return true;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    Iterator&lt;Map.Entry&lt;TableName, SnapshotSentinel&gt;&gt; it = this.snapshotHandlers.entrySet().iterator();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    while (it.hasNext()) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      Map.Entry&lt;TableName, SnapshotSentinel&gt; entry = it.next();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      SnapshotSentinel sentinel = entry.getValue();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      if (snapshot.getName().equals(sentinel.getSnapshot().getName()) &amp;&amp; !sentinel.isFinished()) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        return true;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    return false;<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>  /**<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * Check to see if the specified table has a snapshot in progress.  Currently we have a<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * limitation only allowing a single snapshot per table at a time.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @param tableName name of the table being snapshotted.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if there is a snapshot in progress on the specified table.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  synchronized boolean isTakingSnapshot(final TableName tableName) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    SnapshotSentinel handler = this.snapshotHandlers.get(tableName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    return handler != null &amp;&amp; !handler.isFinished();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * Check to make sure that we are OK to run the passed snapshot. Checks to make sure that we<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * aren't already running a snapshot or restore on the requested table.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * @param snapshot description of the snapshot we want to start<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @throws HBaseSnapshotException if the filesystem could not be prepared to start the snapshot<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  private synchronized void prepareToTakeSnapshot(SnapshotDescription snapshot)<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      throws HBaseSnapshotException {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    FileSystem fs = master.getMasterFileSystem().getFileSystem();<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    TableName snapshotTable =<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        TableName.valueOf(snapshot.getTable());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // make sure we aren't already running a snapshot<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (isTakingSnapshot(snapshot)) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      SnapshotSentinel handler = this.snapshotHandlers.get(snapshotTable);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      throw new SnapshotCreationException("Rejected taking "<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>          + " because we are already running another snapshot "<a name="line.441"></a>
+<span class="sourceLineNo">442</span>          + (handler != null ? ("on the same table " +<a name="line.442"></a>
+<span class="sourceLineNo">443</span>              ClientSnapshotDescriptionUtils.toString(handler.getSnapshot()))<a name="line.443"></a>
+<span class="sourceLineNo">444</span>              : "with the same name"), ProtobufUtil.createSnapshotDesc(snapshot));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><

<TRUNCATED>

[08/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
index ac4f63e..9ec3893 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
@@ -35,358 +35,366 @@
 <span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Timer;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.TimerTask;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.google.common.annotations.VisibleForTesting;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import com.google.common.collect.Lists;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.Log;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.commons.logging.LogFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * we will ignore updates to that snapshot's files.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * &lt;p&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * being run.<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * &lt;p&gt;<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * also removed from the cache.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * all the files under all the regions.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * &lt;p&gt;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span>@InterfaceAudience.Private<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@InterfaceStability.Evolving<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class SnapshotFileCache implements Stoppable {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  interface SnapshotFileInspector {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>     * Returns a collection of file names needed by the snapshot.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * @return the collection of file names needed by the snapshot.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private volatile boolean stop = false;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final FileSystem fs;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final SnapshotFileInspector fileInspector;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final Path snapshotDir;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * them if they haven't changed since the last time we looked.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final Timer refreshTimer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private long lastModifiedTime = Long.MIN_VALUE;<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * filesystem.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * &lt;p&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Immediately loads the file cache.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *          hbase root directory<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        refreshThreadName, inspectSnapshotFiles);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * filesystem<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param rootDir hbase root directory<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.fs = fs;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      cacheRefreshPeriod);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * cache refreshes.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * &lt;p&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Blocks until the cache is refreshed.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * &lt;p&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Exposed for TESTING.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public void triggerCacheRefreshForTesting() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      SnapshotFileCache.this.refreshCache();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    } catch (IOException e) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    LOG.debug("Current cache:" + cache);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * is refreshed and the cache checked again for that file.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * This ensures that we never return files that exist.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * &lt;p&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * at that point, cache will still think the file system contains that file and return<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *              is called (NOT LAZY)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      throws IOException {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    boolean refreshed = false;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (FileStatus file : files) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      String fileName = file.getPath().getName();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        refreshCache();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        refreshed = true;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (cache.contains(fileName)) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      if (snapshotsInProgress == null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        snapshotsInProgress = getSnapshotsInProgress();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        continue;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      unReferencedFiles.add(file);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    return unReferencedFiles;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private synchronized void refreshCache() throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean hasChanges = false;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (FileNotFoundException e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      if (this.cache.size() &gt; 0) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      if (!hasChanges) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        if (tmpSnapshots != null) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } catch (FileNotFoundException e) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Nothing todo, if the tmp dir is empty<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!hasChanges) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<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>    // directory was modified, so we need to reload our cache<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // 1. update the modified time<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.lastModifiedTime = lastTimestamp;<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // 2.clear the cache<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.cache.clear();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // 3. check each of the snapshot directories<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (snapshots == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      // remove all the remembered snapshots because we don't have any left<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      this.snapshots.clear();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      return;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // 3.1 iterate through the on-disk snapshots<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    for (FileStatus snapshot : snapshots) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String name = snapshot.getPath().getName();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // its not the tmp dir,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // probably changed.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          // get all files for the snapshot and create a new info<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        // 3.2 add all the files to cache<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        this.cache.addAll(files.getFiles());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        known.put(name, files);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // 4. set the snapshots we are tracking<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    this.snapshots.clear();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.snapshots.putAll(known);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress() throws IOException {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // only add those files to the cache, but not to the known snapshots<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // only add those files to the cache, but not to the known snapshots<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (running != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      for (FileStatus run : running) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        } catch (CorruptedSnapshotException e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          // See HBASE-16464<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            // If the snapshot is not in progress, we will delete it<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            if (!fs.exists(new Path(run.getPath(),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              SnapshotDescriptionUtils.SNAPSHOT_IN_PROGRESS))) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>              fs.delete(run.getPath(), true);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>              LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.313"></a>
-<span class="sourceLineNo">314</span>            }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          } else {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            throw e;<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>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return snapshotInProgress;<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>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public class RefreshCacheTask extends TimerTask {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public void run() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        SnapshotFileCache.this.refreshCache();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      } catch (IOException e) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public void stop(String why) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (!this.stop) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.stop = true;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.refreshTimer.cancel();<a name="line.342"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import com.google.common.annotations.VisibleForTesting;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.google.common.collect.Lists;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.commons.logging.Log;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.LogFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<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.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * &lt;p&gt;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * we will ignore updates to that snapshot's files.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * being run.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * also removed from the cache.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * all the files under all the regions.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;p&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>@InterfaceAudience.Private<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceStability.Evolving<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class SnapshotFileCache implements Stoppable {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  interface SnapshotFileInspector {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>     * Returns a collection of file names needed by the snapshot.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return the collection of file names needed by the snapshot.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private volatile boolean stop = false;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final FileSystem fs;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final SnapshotFileInspector fileInspector;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final Path snapshotDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * them if they haven't changed since the last time we looked.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final Timer refreshTimer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private long lastModifiedTime = Long.MIN_VALUE;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * filesystem.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * &lt;p&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * Immediately loads the file cache.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *          hbase root directory<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        refreshThreadName, inspectSnapshotFiles);<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>  /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * filesystem<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @param rootDir hbase root directory<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.fs = fs;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      cacheRefreshPeriod);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * cache refreshes.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Blocks until the cache is refreshed.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * &lt;p&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Exposed for TESTING.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void triggerCacheRefreshForTesting() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      SnapshotFileCache.this.refreshCache();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (IOException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    LOG.debug("Current cache:" + cache);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * is refreshed and the cache checked again for that file.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * This ensures that we never return files that exist.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * &lt;p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * at that point, cache will still think the file system contains that file and return<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   *              is called (NOT LAZY)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      final SnapshotManager snapshotManager)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    boolean refreshed = false;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (FileStatus file : files) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      String fileName = file.getPath().getName();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        refreshCache();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        refreshed = true;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (cache.contains(fileName)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        continue;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (snapshotsInProgress == null) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        snapshotsInProgress = getSnapshotsInProgress(snapshotManager);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        continue;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      unReferencedFiles.add(file);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    return unReferencedFiles;<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>  private synchronized void refreshCache() throws IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    boolean hasChanges = false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    } catch (FileNotFoundException e) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      if (this.cache.size() &gt; 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      return;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (!hasChanges) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        if (tmpSnapshots != null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    } catch (FileNotFoundException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // Nothing todo, if the tmp dir is empty<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>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    if (!hasChanges) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      return;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // directory was modified, so we need to reload our cache<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    // 1. update the modified time<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    this.lastModifiedTime = lastTimestamp;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    // 2.clear the cache<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.cache.clear();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // 3. check each of the snapshot directories<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    if (snapshots == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // remove all the remembered snapshots because we don't have any left<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      this.snapshots.clear();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // 3.1 iterate through the on-disk snapshots<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    for (FileStatus snapshot : snapshots) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      String name = snapshot.getPath().getName();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // its not the tmp dir,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        // probably changed.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          // get all files for the snapshot and create a new info<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        // 3.2 add all the files to cache<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        this.cache.addAll(files.getFiles());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        known.put(name, files);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // 4. set the snapshots we are tracking<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    this.snapshots.clear();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.snapshots.putAll(known);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress(<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    final SnapshotManager snapshotManager) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    // only add those files to the cache, but not to the known snapshots<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // only add those files to the cache, but not to the known snapshots<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (running != null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      for (FileStatus run : running) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ReentrantLock lock = null;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        if (snapshotManager != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          lock = snapshotManager.getLocks().acquireLock(run.getPath().getName());<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        } catch (CorruptedSnapshotException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          // See HBASE-16464<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>            // If the snapshot is corrupt, we will delete it<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            fs.delete(run.getPath(), true);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>            throw e;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        } finally {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          if (lock != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            lock.unlock();<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>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return snapshotInProgress;<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>  /**<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  public class RefreshCacheTask extends TimerTask {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    @Override<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    public void run() {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      try {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        SnapshotFileCache.this.refreshCache();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  @Override<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public boolean isStopped() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return this.stop;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Information about a snapshot directory<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private static class SnapshotDirectoryInfo {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long lastModified;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Collection&lt;String&gt; files;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.lastModified = mtime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      this.files = files;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    /**<a name="line.364"></a>
-<span class="sourceLineNo">365</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>     */<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public Collection&lt;String&gt; getFiles() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.files;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * Check if the snapshot directory has been modified<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     * @param mtime current modification time of the directory<a name="line.373"></a>
-<span class="sourceLineNo">374</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.374"></a>
-<span class="sourceLineNo">375</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>     */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    public boolean hasBeenModified(long mtime) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return this.lastModified &lt; mtime;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>}<a name="line.381"></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>  @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public void stop(String why) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    if (!this.stop) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.stop = true;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      this.refreshTimer.cancel();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  public boolean isStopped() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return this.stop;<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>   * Information about a snapshot directory<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private static class SnapshotDirectoryInfo {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    long lastModified;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    Collection&lt;String&gt; files;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      this.lastModified = mtime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      this.files = files;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    /**<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public Collection&lt;String&gt; getFiles() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return this.files;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>    /**<a name="line.379"></a>
+<span class="sourceLineNo">380</span>     * Check if the snapshot directory has been modified<a name="line.380"></a>
+<span class="sourceLineNo">381</span>     * @param mtime current modification time of the directory<a name="line.381"></a>
+<span class="sourceLineNo">382</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    public boolean hasBeenModified(long mtime) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      return this.lastModified &lt; mtime;<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>
 
 
 


[34/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index 6baea79..48c59a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -2241,7 +2241,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>UNSPECIFIED_REGION</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1906">UNSPECIFIED_REGION</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1911">UNSPECIFIED_REGION</a></pre>
 </li>
 </ul>
 <a name="movedRegions">
@@ -2250,7 +2250,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>movedRegions</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3126">movedRegions</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3131">movedRegions</a></pre>
 </li>
 </ul>
 <a name="TIMEOUT_REGION_MOVED">
@@ -2259,7 +2259,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TIMEOUT_REGION_MOVED</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3131">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3136">TIMEOUT_REGION_MOVED</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.TIMEOUT_REGION_MOVED">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -2712,7 +2712,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>createMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1469">createMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1474">createMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException,
                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -2726,7 +2726,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1478">deleteMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1483">deleteMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code>org.apache.zookeeper.KeeperException</code></dd></dl>
@@ -2738,7 +2738,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerAccounting</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1483">getRegionServerAccounting</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1488">getRegionServerAccounting</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerAccounting()">getRegionServerAccounting</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -2751,7 +2751,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableLockManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableLockManager.html" title="class in org.apache.hadoop.hbase.master">TableLockManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1488">getTableLockManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableLockManager.html" title="class in org.apache.hadoop.hbase.master">TableLockManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1493">getTableLockManager</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getTableLockManager()">getTableLockManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -2764,7 +2764,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1500">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
+<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1505">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
                                                                                          org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                                                                                          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&nbsp;regionSpecifier)
                                                                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2778,7 +2778,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1567">createRegionLoad</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1572">createRegionLoad</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)
                                                                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encodedRegionName</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>An instance of RegionLoad.</dd>
@@ -2792,7 +2792,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1668">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1673">isOnline</a>()</pre>
 <div class="block">Report the status of the server. A server is online once all the startup is
  completed (setting up filesystem, starting service threads, etc.). This
  method is designed mostly to be useful in tests.</div>
@@ -2805,7 +2805,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWALAndReplication</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1678">setupWALAndReplication</a>()
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1683">setupWALAndReplication</a>()
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Setup WAL log and replication if enabled.
  Replication setup is done in here because it wants to be hooked up to WAL.</div>
@@ -2820,7 +2820,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureMetaWALRoller</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1714">ensureMetaWALRoller</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1719">ensureMetaWALRoller</a>()</pre>
 <div class="block">We initialize the roller for the wal that handles meta lazily
  since we don't know if this regionserver will handle it. All calls to
  this method return a reference to the that same roller. As newly referenced
@@ -2835,7 +2835,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1734">getRegionServerMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1739">getRegionServerMetrics</a>()</pre>
 </li>
 </ul>
 <a name="getMasterAddressTracker()">
@@ -2844,7 +2844,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterAddressTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1741">getMasterAddressTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1746">getMasterAddressTracker</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Master address tracker instance.</dd></dl>
 </li>
 </ul>
@@ -2854,7 +2854,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>startServiceThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1757">startServiceThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1762">startServiceThreads</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2866,7 +2866,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>putUpWebUI</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1831">putUpWebUI</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1836">putUpWebUI</a>()
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Puts up the webui.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Returns final port -- maybe different from what we started with.</dd>
@@ -2880,7 +2880,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>isHealthy</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1885">isHealthy</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1890">isHealthy</a>()</pre>
 </li>
 </ul>
 <a name="getWALs()">
@@ -2889,7 +2889,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1909">getWALs</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1914">getWALs</a>()
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -2906,7 +2906,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1914">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1919">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -2923,7 +2923,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1933">getConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1938">getConnection</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConnection()">Server</a></code></strong></div>
 <div class="block">Returns a reference to the servers' connection.
 
@@ -2941,7 +2941,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1938">getClusterConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1943">getClusterConnection</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getClusterConnection()">Server</a></code></strong></div>
 <div class="block">Returns a reference to the servers' cluster connection. Prefer <a href="../../../../../org/apache/hadoop/hbase/Server.html#getConnection()"><code>Server.getConnection()</code></a>.
 
@@ -2959,7 +2959,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableLocator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1943">getMetaTableLocator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1948">getMetaTableLocator</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getMetaTableLocator()">Server</a></code></strong></div>
 <div class="block">Returns instance of <a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>MetaTableLocator</code></a>
  running inside this server. This MetaServerLocator is started and stopped by server, clients
@@ -2976,7 +2976,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1948">stop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1953">stop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop(java.lang.String)">Stoppable</a></code></strong></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -2992,7 +2992,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForServerOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1964">waitForServerOnline</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1969">waitForServerOnline</a>()</pre>
 </li>
 </ul>
 <a name="postOpenDeployTasks(org.apache.hadoop.hbase.regionserver.Region)">
@@ -3001,7 +3001,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>postOpenDeployTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1978">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1983">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)
                          throws org.apache.zookeeper.KeeperException,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#postOpenDeployTasks(org.apache.hadoop.hbase.regionserver.Region)">RegionServerServices</a></code></strong></div>
@@ -3022,7 +3022,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>postOpenDeployTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1983">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1988">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
                          throws org.apache.zookeeper.KeeperException,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#postOpenDeployTasks(org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext)">RegionServerServices</a></code></strong></div>
@@ -3043,7 +3043,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionStateTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2020">reportRegionStateTransition</a>(org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2025">reportRegionStateTransition</a>(org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
                                   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>...&nbsp;hris)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportRegionStateTransition(org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode,%20org.apache.hadoop.hbase.HRegionInfo...)">RegionServerServices</a></code></strong></div>
 <div class="block">Notify master that a handler requests to change a region state</div>
@@ -3059,7 +3059,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionStateTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2025">reportRegionStateTransition</a>(org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2030">reportRegionStateTransition</a>(org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
                                   long&nbsp;openSeqNum,
                                   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>...&nbsp;hris)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportRegionStateTransition(org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode,%20long,%20org.apache.hadoop.hbase.HRegionInfo...)">RegionServerServices</a></code></strong></div>
@@ -3076,7 +3076,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionStateTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2032">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2037">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportRegionStateTransition(org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext)">RegionServerServices</a></code></strong></div>
 <div class="block">Notify master that a handler requests to change a region state</div>
 <dl>
@@ -3091,7 +3091,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerFlushInPrimaryRegion</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2106">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2111">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block">Trigger a flush in the primary region replica if this region is a secondary replica. Does not
  block this thread. See RegionReplicaFlushHandler for details.</div>
 </li>
@@ -3102,7 +3102,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2127">getRpcServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2132">getRpcServer</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRpcServer()">RegionServerServices</a></code></strong></div>
 <div class="block">Returns a reference to the region server's RPC server</div>
 <dl>
@@ -3117,7 +3117,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2132">getRSRpcServices</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2137">getRSRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="abort(java.lang.String, java.lang.Throwable)">
@@ -3126,7 +3126,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2147">abort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2152">abort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log
  it is using and without notifying the master. Used unit testing and on
@@ -3143,7 +3143,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2191">abort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2196">abort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort(java.lang.String,%20java.lang.Throwable)"><code>abort(String, Throwable)</code></a></dd></dl>
 </li>
 </ul>
@@ -3153,7 +3153,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2196">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2201">isAborted</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted()">Abortable</a></code></strong></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>
@@ -3168,7 +3168,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>kill</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2205">kill</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2210">kill</a>()</pre>
 </li>
 </ul>
 <a name="sendShutdownInterrupt()">
@@ -3177,7 +3177,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>sendShutdownInterrupt</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2213">sendShutdownInterrupt</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2218">sendShutdownInterrupt</a>()</pre>
 <div class="block">Called on stop/abort before closing the cluster connection and meta locator.</div>
 </li>
 </ul>
@@ -3187,7 +3187,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2220">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2225">stopServiceThreads</a>()</pre>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
 </li>
@@ -3198,7 +3198,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSourceService</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2265">getReplicationSourceService</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2270">getReplicationSourceService</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Return the object that implements the replication
  source service.</dd></dl>
 </li>
@@ -3209,7 +3209,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSinkService</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2273">getReplicationSinkService</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2278">getReplicationSinkService</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Return the object that implements the replication
  sink service.</dd></dl>
 </li>
@@ -3220,7 +3220,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>protected&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/regionserver/HRegionServer.html#line.2286">createRegionServerStatusStub</a>()</pre>
+<pre>protected&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/regionserver/HRegionServer.html#line.2291">createRegionServerStatusStub</a>()</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.
  To get a fresh connection, the current rssStub must be null.
  Method will block until a master is available. You can break from this
@@ -3234,7 +3234,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>keepLooping</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2355">keepLooping</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2360">keepLooping</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if we should break loop because cluster is going down or
  this server has been stopped or hdfs has gone bad.</dd></dl>
 </li>
@@ -3245,7 +3245,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>reportForDuty</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2366">reportForDuty</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2371">reportForDuty</a>()
                                                                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -3257,7 +3257,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastSequenceId</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2405">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2410">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html#getLastSequenceId(byte[])">getLastSequenceId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></code></dd>
@@ -3272,7 +3272,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAllRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2436">closeAllRegions</a>(boolean&nbsp;abort)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2441">closeAllRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Closes all regions.  Called on our way out.
  Assumes that its not possible for new regions to be added to onlineRegions
  while this method runs.</div>
@@ -3284,7 +3284,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>closeMetaTableRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2445">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2450">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Close meta region if we carry it</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>abort</code> - Whether we're running an abort.</dd></dl>
 </li>
@@ -3295,7 +3295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>closeUserRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2468">closeUserRegions</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2473">closeUserRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Schedule closes on all user regions.
  Should be safe calling multiple times because it wont' close regions
  that are already closed or that are closing.</div>
@@ -3308,7 +3308,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getInfoServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2484">getInfoServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2489">getInfoServer</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the info server</dd></dl>
 </li>
 </ul>
@@ -3318,7 +3318,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2492">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2497">isStopped</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>
@@ -3331,7 +3331,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopping</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2497">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2502">isStopping</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#isStopping()">isStopping</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3344,7 +3344,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRecoveringRegions</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2502">getRecoveringRegions</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2507">getRecoveringRegions</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRecoveringRegions()">getRecoveringRegions</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3357,7 +3357,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2511">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2516">getConfiguration</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConfiguration()">Server</a></code></strong></div>
 <div class="block">Gets the configuration object for this server.</div>
 <dl>
@@ -3372,7 +3372,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteLock</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2516">getWriteLock</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2521">getWriteLock</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the write lock for the server</dd></dl>
 </li>
 </ul>
@@ -3382,7 +3382,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfOnlineRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2520">getNumberOfOnlineRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2525">getNumberOfOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="isOnlineRegionsEmpty()">
@@ -3391,7 +3391,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnlineRegionsEmpty</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2524">isOnlineRegionsEmpty</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2529">isOnlineRegionsEmpty</a>()</pre>
 </li>
 </ul>
 <a name="getOnlineRegionsLocalContext()">
@@ -3400,7 +3400,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsLocalContext</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2533">getOnlineRegionsLocalContext</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2538">getOnlineRegionsLocalContext</a>()</pre>
 <div class="block">For tests, web ui and metrics.
  This method will only work if HRegionServer is in the same JVM as client;
  HRegion cannot be serialized to cross an rpc.</div>
@@ -3412,7 +3412,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addToOnlineRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2539">addToOnlineRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2544">addToOnlineRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html#addToOnlineRegions(org.apache.hadoop.hbase.regionserver.Region)">OnlineRegions</a></code></strong></div>
 <div class="block">Add to online regions.</div>
 <dl>
@@ -3427,7 +3427,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getCopyOfOnlineRegionsSortedBySize</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2549">getCopyOfOnlineRegionsSortedBySize</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2554">getCopyOfOnlineRegionsSortedBySize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>A new Map of online regions sorted by region size with the first entry being the
  biggest.  If two regions are the same size, then the last one found wins; i.e. this method
  may NOT return all regions.</dd></dl>
@@ -3439,7 +3439,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartcode</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2568">getStartcode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2573">getStartcode</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>time stamp in millis of when this region server was started</dd></dl>
 </li>
 </ul>
@@ -3449,7 +3449,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushRequester</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2574">getFlushRequester</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2579">getFlushRequester</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushRequester()">getFlushRequester</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3462,7 +3462,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getMostLoadedRegions</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2584">getMostLoadedRegions</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2589">getMostLoadedRegions</a>()</pre>
 <div class="block">Get the top N most loaded regions this server is serving so we can tell the
  master which regions it can reallocate if we're overloaded. TODO: actually
  calculate which regions are most loaded. (Right now, we're just grabbing
@@ -3475,7 +3475,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getLeases</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html" title="class in org.apache.hadoop.hbase.regionserver">Leases</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2600">getLeases</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html" title="class in org.apache.hadoop.hbase.regionserver">Leases</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2605">getLeases</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getLeases()">getLeases</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3488,7 +3488,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2607">getRootDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2612">getRootDir</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Return the rootDir.</dd></dl>
 </li>
 </ul>
@@ -3498,7 +3498,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2615">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2620">getFileSystem</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFileSystem()">getFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3511,7 +3511,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2620">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2625">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -3524,7 +3524,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getThreadWakeFrequency</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2629">getThreadWakeFrequency</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2634">getThreadWakeFrequency</a>()</pre>
 <div class="block">Interval at which threads should run</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the interval</dd></dl>
 </li>
@@ -3535,7 +3535,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZooKeeperWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2634">getZooKeeper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZooKeeperWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2639">getZooKeeper</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getZooKeeper()">Server</a></code></strong></div>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 <dl>
@@ -3550,7 +3550,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinatedStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/BaseCoordinatedStateManager.html" title="class in org.apache.hadoop.hbase.coordination">BaseCoordinatedStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2639">getCoordinatedStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/BaseCoordinatedStateManager.html" title="class in org.apache.hadoop.hbase.coordination">BaseCoordinatedStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2644">getCoordinatedStateManager</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getCoordinatedStateManager()">Server</a></code></strong></div>
 <div class="block">Get CoordinatedStateManager instance for this server.</div>
 <dl>
@@ -3565,7 +3565,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</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/regionserver/HRegionServer.html#line.2644">getServerName</a>()</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/regionserver/HRegionServer.html#line.2649">getServerName</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getServerName()">getServerName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3578,7 +3578,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionRequester</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactionRequestor.html" title="interface in org.apache.hadoop.hbase.regionserver">CompactionRequestor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2649">getCompactionRequester</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactionRequestor.html" title="interface in org.apache.hadoop.hbase.regionserver">CompactionRequestor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2654">getCompactionRequester</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getCompactionRequester()">getCompactionRequester</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3591,7 +3591,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2653">getRegionServerCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2658">getRegionServerCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionInRS()">
@@ -3600,7 +3600,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInTransitionInRS</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2658">getRegionsInTransitionInRS</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2663">getRegionsInTransitionInRS</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionsInTransitionInRS()">RegionServerServices</a></code></strong></div>
 <div class="block">Get the regions that are currently being opened or closed in the RS</div>
 <dl>
@@ -3615,7 +3615,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getExecutorService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2663">getExecutorService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2668">getExecutorService</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getExecutorService()">getExecutorService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3628,7 +3628,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getChoreService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2668">getChoreService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2673">getChoreService</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getChoreService()">getChoreService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3641,7 +3641,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerQuotaManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2673">getRegionServerQuotaManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2678">getRegionServerQuotaManager</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerQuotaManager()">getRegionServerQuotaManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3654,7 +3654,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>createNewReplicationInstance</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2684">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2689">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server,
                                 org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                 org.apache.hadoop.fs.Path&nbsp;logDir,
@@ -3671,7 +3671,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>newReplicationInstance</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2718">newReplicationInstance</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classname,
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2723">newReplicationInstance</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classname,
                                         org.apache.hadoop.conf.Configuration&nbsp;conf,
                                         <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server,
                                         org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -3688,7 +3688,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>constructRegionServer</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2744">constructRegionServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&gt;&nbsp;regionServerClass,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2749">constructRegionServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&gt;&nbsp;regionServerClass,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf2,
                                   <a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a>&nbsp;cp)</pre>
 <div class="block">Utility for constructing an instance of the passed HRegionServer class.</div>
@@ -3702,7 +3702,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2760">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2765">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionServerCommandLine</code></a></dd></dl>
@@ -3714,7 +3714,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegions</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2781">getOnlineRegions</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="http://docs.oracle.com/javase/7/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/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2786">getOnlineRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Gets the online regions of the specified table.
  This method looks at the in-memory onlineRegions.  It does not go to <code>hbase:meta</code>.
  Only returns <em>online</em> regions.  If a region on this table has been
@@ -3734,7 +3734,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegions</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2795">getOnlineRegions</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2800">getOnlineRegions</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html#getOnlineRegions()">OnlineRegions</a></code></strong></div>
 <div class="block">Get all online regions in this RS.</div>
 <dl>
@@ -3749,7 +3749,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineTables</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2809">getOnlineTables</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2814">getOnlineTables</a>()</pre>
 <div class="block">Gets the online tables in this RS.
  This method looks at the in-memory onlineRegions.</div>
 <dl>
@@ -3764,7 +3764,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerCoprocessors</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2820">getRegionServerCoprocessors</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2825">getRegionServerCoprocessors</a>()</pre>
 </li>
 </ul>
 <a name="closeRegionIgnoreErrors(org.apache.hadoop.hbase.HRegionInfo, boolean)">
@@ -3773,7 +3773,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionIgnoreErrors</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2847">closeRegionIgnoreErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2852">closeRegionIgnoreErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                            boolean&nbsp;abort)</pre>
 <div class="block">Try to close the region, logs a warning on failure but continues.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>region</code> - Region to close</dd></dl>
@@ -3785,7 +3785,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2877">closeRegion</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2882">closeRegion</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName,
                   boolean&nbsp;abort,
                   <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)
                        throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
@@ -3812,7 +3812,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2942">getOnlineRegion</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href

<TRUNCATED>

[23/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
index 66dbcf3..7293a11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
@@ -130,7 +130,7 @@
 <span class="sourceLineNo">122</span><a name="line.122"></a>
 <span class="sourceLineNo">123</span>    /** We need to store a copy of the key. */<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    protected byte[] keyBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = null;<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    protected long memstoreTS;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    protected int nextKvOffset;<a name="line.128"></a>
@@ -140,1035 +140,1046 @@
 <span class="sourceLineNo">132</span>    private final ObjectIntPair&lt;ByteBuffer&gt; tmpPair;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    private final boolean includeTags;<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.tmpPair = tmpPair;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.includeTags = includeTags;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected boolean isValid() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return valueOffset != -1;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    protected void invalidate() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      valueOffset = -1;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      tagsCompressedLength = 0;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      uncompressTags = true;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      currentBuffer = null;<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>    protected void ensureSpaceForKey() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // rare case, but we need to handle arbitrary length of key<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          newKeyBufferLength *= 2;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        keyBuffer = newKeyBuffer;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    protected void ensureSpaceForTags() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          newTagsBufferLength *= 2;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        tagsBuffer = newTagsBuffer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      memstoreTS = memTS;<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>    /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     * Copy the state from the next one into this instance (the previous state<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     * seeker to the next key/value.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>     */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else if (!isValid()) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Note: we can only call isValid before we override our state, so this<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // comes before all the assignments at the end of this method.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>             nextState.keyLength);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // don't copy the common prefix between this key and the previous one<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                - nextState.lastCommonPrefix);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentKey = nextState.currentKey;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      valueOffset = nextState.valueOffset;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      keyLength = nextState.keyLength;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      valueLength = nextState.valueLength;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      memstoreTS = nextState.memstoreTS;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      currentBuffer = nextState.currentBuffer;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      tagsOffset = nextState.tagsOffset;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      tagsLength = nextState.tagsLength;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (nextState.tagCompressionContext != null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        tagCompressionContext = nextState.tagCompressionContext;<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>    public Cell toCell() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ByteBuffer valAndTagsBuffer;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      int vOffset;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int valAndTagsLength = this.valueLength;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int tagsLenSerializationSize = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // length<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        int tagsLenSerializationSize) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      int tOffset = 0;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (this.includeTags) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (this.tagCompressionContext == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          tagsArray = valAndTagsBuffer.array();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              + tagsLenSerializationSize;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        } else {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          tOffset = 0;<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>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          tOffset, this.tagsLength);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int tagsLenSerializationSize) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      int tOffset = 0;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.includeTags) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        if (this.tagCompressionContext == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          tagsBuf = valAndTagsBuffer;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        } else {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          tOffset = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * seeker state members for taking a clone.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * represented by the valueOffset and valueLength<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Streamable {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    private byte[] keyOnlyBuffer;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    private short rowLength;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    private int familyOffset;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    private byte familyLength;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    private int qualifierOffset;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    private int qualifierLength;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    private long timestamp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    private byte typeByte;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    private byte[] valueBuffer;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    private int valueOffset;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    private int valueLength;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    private byte[] tagsBuffer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    private int tagsOffset;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    private int tagsLength;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    private long seqId;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        int tagsOffset, int tagsLength) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      this.rowLength = rowLength;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      this.familyOffset = familyOffset;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.familyLength = familyLength;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      this.qualifierOffset = qualOffset;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.qualifierLength = qualLength;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      this.timestamp = timeStamp;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      this.typeByte = typeByte;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      this.valueBuffer = valueBuffer;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.valueOffset = valueOffset;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.valueLength = valueLen;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.tagsBuffer = tagsBuffer;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.tagsOffset = tagsOffset;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.tagsLength = tagsLength;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      setSequenceId(seqId);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public byte[] getRowArray() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return keyOnlyBuffer;<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>    @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public byte[] getFamilyArray() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return keyOnlyBuffer;<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>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public byte[] getQualifierArray() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return keyOnlyBuffer;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public int getRowOffset() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return Bytes.SIZEOF_SHORT;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public short getRowLength() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return rowLength;<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>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public int getFamilyOffset() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return familyOffset;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public byte getFamilyLength() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return familyLength;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public int getQualifierOffset() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return qualifierOffset;<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public int getQualifierLength() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return qualifierLength;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public long getTimestamp() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      return timestamp;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public byte getTypeByte() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return typeByte;<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>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public long getSequenceId() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return seqId;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public byte[] getValueArray() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return this.valueBuffer;<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>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public int getValueOffset() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return valueOffset;<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>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public int getValueLength() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return valueLength;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    public byte[] getTagsArray() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      return this.tagsBuffer;<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>    @Override<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    public int getTagsOffset() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return this.tagsOffset;<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>    @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    public int getTagsLength() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return tagsLength;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    @Override<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    public String toString() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.427"></a>
+<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        boolean tagsCompressed) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.tmpPair = tmpPair;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.includeTags = includeTags;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      if (tagsCompressed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        tagsBuffer = HConstants.EMPTY_BYTE_ARRAY;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    protected boolean isValid() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return valueOffset != -1;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    protected void invalidate() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      valueOffset = -1;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      tagsCompressedLength = 0;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      uncompressTags = true;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      currentBuffer = null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    protected void ensureSpaceForKey() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        // rare case, but we need to handle arbitrary length of key<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          newKeyBufferLength *= 2;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        keyBuffer = newKeyBuffer;<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><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    protected void ensureSpaceForTags() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          newTagsBufferLength *= 2;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        tagsBuffer = newTagsBuffer;<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><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      memstoreTS = memTS;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>     * Copy the state from the next one into this instance (the previous state<a name="line.190"></a>
+<span class="sourceLineNo">191</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.191"></a>
+<span class="sourceLineNo">192</span>     * seeker to the next key/value.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else if (!isValid()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        // Note: we can only call isValid before we override our state, so this<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // comes before all the assignments at the end of this method.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>             nextState.keyLength);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        // don't copy the common prefix between this key and the previous one<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                - nextState.lastCommonPrefix);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentKey = nextState.currentKey;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      valueOffset = nextState.valueOffset;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      keyLength = nextState.keyLength;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      valueLength = nextState.valueLength;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      memstoreTS = nextState.memstoreTS;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      currentBuffer = nextState.currentBuffer;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      tagsOffset = nextState.tagsOffset;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      tagsLength = nextState.tagsLength;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (nextState.tagCompressionContext != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tagCompressionContext = nextState.tagCompressionContext;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public Cell toCell() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      ByteBuffer valAndTagsBuffer;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      int vOffset;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      int valAndTagsLength = this.valueLength;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int tagsLenSerializationSize = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        // length<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<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><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        int tagsLenSerializationSize) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      int tOffset = 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (this.includeTags) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (this.tagCompressionContext == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          tagsArray = valAndTagsBuffer.array();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              + tagsLenSerializationSize;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          tOffset = 0;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          tOffset, this.tagsLength);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        int tagsLenSerializationSize) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      int tOffset = 0;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      if (this.includeTags) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        if (this.tagCompressionContext == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          tagsBuf = valAndTagsBuffer;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          tOffset = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * seeker state members for taking a clone.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * represented by the valueOffset and valueLength<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      Streamable {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    private byte[] keyOnlyBuffer;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    private short rowLength;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    private int familyOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    private byte familyLength;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private int qualifierOffset;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    private int qualifierLength;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private long timestamp;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private byte typeByte;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    private byte[] valueBuffer;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    private int valueOffset;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    private int valueLength;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    private byte[] tagsBuffer;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    private int tagsOffset;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    private int tagsLength;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    private long seqId;<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int tagsOffset, int tagsLength) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      this.rowLength = rowLength;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      this.familyOffset = familyOffset;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      this.familyLength = familyLength;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.qualifierOffset = qualOffset;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.qualifierLength = qualLength;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.timestamp = timeStamp;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.typeByte = typeByte;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.valueBuffer = valueBuffer;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.valueOffset = valueOffset;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.valueLength = valueLen;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.tagsBuffer = tagsBuffer;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.tagsOffset = tagsOffset;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.tagsLength = tagsLength;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setSequenceId(seqId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    public byte[] getRowArray() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return keyOnlyBuffer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public byte[] getFamilyArray() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return keyOnlyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    @Override<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public byte[] getQualifierArray() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return keyOnlyBuffer;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public int getRowOffset() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return Bytes.SIZEOF_SHORT;<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>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public short getRowLength() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return rowLength;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    public int getFamilyOffset() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return familyOffset;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public byte getFamilyLength() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return familyLength;<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public int getQualifierOffset() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return qualifierOffset;<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>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public int getQualifierLength() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return qualifierLength;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    public long getTimestamp() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return timestamp;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    public byte getTypeByte() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return typeByte;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public long getSequenceId() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return seqId;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public byte[] getValueArray() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return this.valueBuffer;<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>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public int getValueOffset() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      return valueOffset;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    public int getValueLength() {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return valueLength;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public byte[] getTagsArray() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return this.tagsBuffer;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public int getTagsOffset() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return this.tagsOffset;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public int getTagsLength() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return tagsLength;<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>    @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    public void setSequenceId(long seqId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.seqId = seqId;<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>    @Override<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public long heapSize() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    public int write(OutputStream out) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return write(out, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          tagsLength, withTags);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // Write key<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      out.write(keyOnlyBuffer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // Write value<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (withTags) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        // 2 bytes tags length followed by tags bytes<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      SettableSequenceId, Streamable {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.BYTE_BUFFER));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private ByteBuffer keyBuffer;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    private short rowLength;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    private int familyOffset;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private byte familyLength;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private int qualifierOffset;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    private int qualifierLength;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private long timestamp;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    private byte typeByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private ByteBuffer valueBuffer;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    private int valueOffset;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    private int valueLength;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    private ByteBuffer tagsBuffer;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    private int tagsOffset;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    private int tagsLength;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    private long seqId;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    protected OffheapDecodedCell(ByteBuffer keyBuffer, short rowLength, int familyOffset,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        ByteBuffer valueBuffer, int valueOffset, int valueLen, long seqId, ByteBuffer tagsBuffer,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        int tagsOffset, int tagsLength) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // The keyBuffer is always onheap<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      assert keyBuffer.hasArray();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      assert keyBuffer.arrayOffset() == 0;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this.keyBuffer = keyBuffer;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.rowLength = rowLength;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      this.familyOffset = familyOffset;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      this.familyLength = familyLength;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.qualifierOffset = qualOffset;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.qualifierLength = qualLength;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.timestamp = timeStamp;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.typeByte = typeByte;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.valueBuffer = valueBuffer;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.valueOffset = valueOffset;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      this.valueLength = valueLen;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      this.tagsBuffer = tagsBuffer;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.tagsOffset = tagsOffset;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.tagsLength = tagsLength;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      setSequenceId(seqId);<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>    @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public byte[] getRowArray() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      return this.keyBuffer.array();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public int getRowOffset() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return getRowPosition();<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>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public short getRowLength() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.rowLength;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public byte[] getFamilyArray() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.keyBuffer.array();<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>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public int getFamilyOffset() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      return getFamilyPosition();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public byte getFamilyLength() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.familyLength;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public byte[] getQualifierArray() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.keyBuffer.array();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @Override<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    public int getQualifierOffset() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return getQualifierPosition();<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>    @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    public int getQualifierLength() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.qualifierLength;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public long getTimestamp() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.timestamp;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public byte getTypeByte() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      return this.typeByte;<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>    @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    public long getSequenceId() {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      return this.seqId;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    public byte[] getValueArray() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      return CellUtil.cloneValue(this);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public int getValueOffset() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      return 0;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>    @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    public int getValueLength() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.valueLength;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    public byte[] getTagsArray() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return CellUtil.cloneTags(this);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    public int getTagsOffset() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return 0;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public int getTagsLength() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      return this.tagsLength;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    public ByteBuffer getRowByteBuffer() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.keyBuffer;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    public int getRowPosition() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      return Bytes.SIZEOF_SHORT;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    public ByteBuffer getFamilyByteBuffer() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return this.keyBuffer;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    @Override<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    public int getFamilyPosition() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.familyOffset;<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>    @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    public ByteBuffer getQualifierByteBuffer() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return this.keyBuffer;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>    @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    public int getQualifierPosition() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      return this.qualifierOffset;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    @Override<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    public ByteBuffer getValueByteBuffer() {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.valueBuffer;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    @Override<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public int getValuePosition() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return this.valueOffset;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    @Override<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    public ByteBuffer getTagsByteBuffer() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      return this.tagsBuffer;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    @Override<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    public int getTagsPosition() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.tagsOffset;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public long heapSize() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>    @Override<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    public void setSequenceId(long seqId) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      this.seqId = seqId;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    @Override<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    public int write(OutputStream out) throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return write(out, true);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          tagsLength, withTags);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      ByteBufferUtils.putInt(out, keyBuffer.capacity());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Write key<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      out.write(keyBuffer.array());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Write value<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      ByteBufferUtils.copyBufferToStream(out, this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (withTags) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // 2 bytes tags length followed by tags bytes<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        ByteBufferUtils.copyBufferToStream(out, this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      return lenToWrite + Bytes.SIZEOF_INT;<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>  protected abstract static class<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      BufferedEncodedSeeker&lt;STATE extends SeekerState&gt;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      implements EncodedSeeker {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    protected HFileBlockDecodingContext decodingCtx;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    protected final CellComparator comparator;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    protected ByteBuff currentBuffer;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    protected TagCompressionContext tagCompressionContext = null;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    protected  KeyValue.KeyOnlyKeyValue keyOnlyKV = new KeyValue.KeyOnlyKeyValue();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // many object creations.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    protected STATE current, previous;<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    public BufferedEncodedSeeker(CellComparator comparator,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        HFileBlockDecodingContext decodingCtx) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      this.comparator = comparator;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      this.decodingCtx = decodingCtx;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (decodingCtx.getHFileContext().isCompressTags()) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        try {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          tagCompressionContext = new TagCompressionContext(LRUDictionary.class, Byte.MAX_VALUE);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        } catch (Exception e) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          throw new RuntimeException("Failed to initialize TagCompressionContext", e);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      current = createSeekerState(); // always valid<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      previous = createSeekerState(); // may not be valid<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    protected boolean includesMvcc() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    protected boolean includesTags() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    @Override<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    public int compareKey(CellComparator comparator, Cell key) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      keyOnlyKV.setKey(current.keyBuffer, 0, current.keyLength);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      return comparator.compareKeyIgnoresMvcc(key, keyOnlyKV);<a name="line.730"></a>
+<span class="sourceLineNo">431</span>    public String toString() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    public void setSequenceId(long seqId) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      this.seqId = seqId;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public long heapSize() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<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>    @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    public int write(OutputStream out) throws IOException {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return write(out, true);<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>    @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          tagsLength, withTags);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      // Write key<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      out.write(keyOnlyBuffer);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      // Write value<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (withTags) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        // 2 bytes tags length followed by tags bytes<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      SettableSequenceId, Streamable {<a name="line.475"></a>
+<span class="sourceLineNo">476</

<TRUNCATED>

[22/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
index 66dbcf3..7293a11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html
@@ -130,7 +130,7 @@
 <span class="sourceLineNo">122</span><a name="line.122"></a>
 <span class="sourceLineNo">123</span>    /** We need to store a copy of the key. */<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    protected byte[] keyBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = null;<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    protected long memstoreTS;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    protected int nextKvOffset;<a name="line.128"></a>
@@ -140,1035 +140,1046 @@
 <span class="sourceLineNo">132</span>    private final ObjectIntPair&lt;ByteBuffer&gt; tmpPair;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    private final boolean includeTags;<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.tmpPair = tmpPair;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.includeTags = includeTags;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected boolean isValid() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return valueOffset != -1;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    protected void invalidate() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      valueOffset = -1;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      tagsCompressedLength = 0;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      uncompressTags = true;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      currentBuffer = null;<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>    protected void ensureSpaceForKey() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // rare case, but we need to handle arbitrary length of key<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          newKeyBufferLength *= 2;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        keyBuffer = newKeyBuffer;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    protected void ensureSpaceForTags() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          newTagsBufferLength *= 2;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        tagsBuffer = newTagsBuffer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      memstoreTS = memTS;<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>    /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     * Copy the state from the next one into this instance (the previous state<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     * seeker to the next key/value.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>     */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else if (!isValid()) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Note: we can only call isValid before we override our state, so this<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // comes before all the assignments at the end of this method.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>             nextState.keyLength);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // don't copy the common prefix between this key and the previous one<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                - nextState.lastCommonPrefix);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentKey = nextState.currentKey;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      valueOffset = nextState.valueOffset;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      keyLength = nextState.keyLength;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      valueLength = nextState.valueLength;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      memstoreTS = nextState.memstoreTS;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      currentBuffer = nextState.currentBuffer;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      tagsOffset = nextState.tagsOffset;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      tagsLength = nextState.tagsLength;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (nextState.tagCompressionContext != null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        tagCompressionContext = nextState.tagCompressionContext;<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>    public Cell toCell() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ByteBuffer valAndTagsBuffer;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      int vOffset;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int valAndTagsLength = this.valueLength;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int tagsLenSerializationSize = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // length<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        int tagsLenSerializationSize) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      int tOffset = 0;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (this.includeTags) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (this.tagCompressionContext == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          tagsArray = valAndTagsBuffer.array();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              + tagsLenSerializationSize;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        } else {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          tOffset = 0;<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>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          tOffset, this.tagsLength);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int tagsLenSerializationSize) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      int tOffset = 0;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.includeTags) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        if (this.tagCompressionContext == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          tagsBuf = valAndTagsBuffer;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        } else {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          tOffset = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * seeker state members for taking a clone.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * represented by the valueOffset and valueLength<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Streamable {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    private byte[] keyOnlyBuffer;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    private short rowLength;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    private int familyOffset;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    private byte familyLength;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    private int qualifierOffset;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    private int qualifierLength;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    private long timestamp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    private byte typeByte;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    private byte[] valueBuffer;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    private int valueOffset;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    private int valueLength;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    private byte[] tagsBuffer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    private int tagsOffset;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    private int tagsLength;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    private long seqId;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        int tagsOffset, int tagsLength) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      this.rowLength = rowLength;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      this.familyOffset = familyOffset;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.familyLength = familyLength;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      this.qualifierOffset = qualOffset;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.qualifierLength = qualLength;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      this.timestamp = timeStamp;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      this.typeByte = typeByte;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      this.valueBuffer = valueBuffer;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.valueOffset = valueOffset;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.valueLength = valueLen;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.tagsBuffer = tagsBuffer;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.tagsOffset = tagsOffset;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.tagsLength = tagsLength;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      setSequenceId(seqId);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public byte[] getRowArray() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return keyOnlyBuffer;<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>    @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public byte[] getFamilyArray() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return keyOnlyBuffer;<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>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public byte[] getQualifierArray() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return keyOnlyBuffer;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public int getRowOffset() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return Bytes.SIZEOF_SHORT;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public short getRowLength() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return rowLength;<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>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public int getFamilyOffset() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return familyOffset;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public byte getFamilyLength() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return familyLength;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public int getQualifierOffset() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return qualifierOffset;<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public int getQualifierLength() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return qualifierLength;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public long getTimestamp() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      return timestamp;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public byte getTypeByte() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return typeByte;<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>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public long getSequenceId() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return seqId;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public byte[] getValueArray() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return this.valueBuffer;<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>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public int getValueOffset() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return valueOffset;<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>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public int getValueLength() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return valueLength;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    public byte[] getTagsArray() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      return this.tagsBuffer;<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>    @Override<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    public int getTagsOffset() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return this.tagsOffset;<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>    @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    public int getTagsLength() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return tagsLength;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    @Override<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    public String toString() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.427"></a>
+<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        boolean tagsCompressed) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.tmpPair = tmpPair;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.includeTags = includeTags;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      if (tagsCompressed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        tagsBuffer = HConstants.EMPTY_BYTE_ARRAY;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    protected boolean isValid() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return valueOffset != -1;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    protected void invalidate() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      valueOffset = -1;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      tagsCompressedLength = 0;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      uncompressTags = true;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      currentBuffer = null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    protected void ensureSpaceForKey() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        // rare case, but we need to handle arbitrary length of key<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          newKeyBufferLength *= 2;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        keyBuffer = newKeyBuffer;<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><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    protected void ensureSpaceForTags() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          newTagsBufferLength *= 2;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        tagsBuffer = newTagsBuffer;<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><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      memstoreTS = memTS;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>     * Copy the state from the next one into this instance (the previous state<a name="line.190"></a>
+<span class="sourceLineNo">191</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.191"></a>
+<span class="sourceLineNo">192</span>     * seeker to the next key/value.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else if (!isValid()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        // Note: we can only call isValid before we override our state, so this<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // comes before all the assignments at the end of this method.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>             nextState.keyLength);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        // don't copy the common prefix between this key and the previous one<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                - nextState.lastCommonPrefix);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentKey = nextState.currentKey;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      valueOffset = nextState.valueOffset;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      keyLength = nextState.keyLength;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      valueLength = nextState.valueLength;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      memstoreTS = nextState.memstoreTS;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      currentBuffer = nextState.currentBuffer;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      tagsOffset = nextState.tagsOffset;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      tagsLength = nextState.tagsLength;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (nextState.tagCompressionContext != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tagCompressionContext = nextState.tagCompressionContext;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public Cell toCell() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      ByteBuffer valAndTagsBuffer;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      int vOffset;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      int valAndTagsLength = this.valueLength;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int tagsLenSerializationSize = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        // length<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<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><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        int tagsLenSerializationSize) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      int tOffset = 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (this.includeTags) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (this.tagCompressionContext == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          tagsArray = valAndTagsBuffer.array();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              + tagsLenSerializationSize;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          tOffset = 0;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          tOffset, this.tagsLength);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        int tagsLenSerializationSize) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      int tOffset = 0;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      if (this.includeTags) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        if (this.tagCompressionContext == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          tagsBuf = valAndTagsBuffer;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          tOffset = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * seeker state members for taking a clone.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * represented by the valueOffset and valueLength<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      Streamable {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    private byte[] keyOnlyBuffer;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    private short rowLength;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    private int familyOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    private byte familyLength;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private int qualifierOffset;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    private int qualifierLength;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private long timestamp;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private byte typeByte;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    private byte[] valueBuffer;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    private int valueOffset;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    private int valueLength;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    private byte[] tagsBuffer;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    private int tagsOffset;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    private int tagsLength;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    private long seqId;<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int tagsOffset, int tagsLength) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      this.rowLength = rowLength;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      this.familyOffset = familyOffset;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      this.familyLength = familyLength;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.qualifierOffset = qualOffset;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.qualifierLength = qualLength;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.timestamp = timeStamp;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.typeByte = typeByte;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.valueBuffer = valueBuffer;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.valueOffset = valueOffset;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.valueLength = valueLen;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.tagsBuffer = tagsBuffer;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.tagsOffset = tagsOffset;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.tagsLength = tagsLength;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setSequenceId(seqId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    public byte[] getRowArray() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return keyOnlyBuffer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public byte[] getFamilyArray() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return keyOnlyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    @Override<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public byte[] getQualifierArray() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return keyOnlyBuffer;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public int getRowOffset() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return Bytes.SIZEOF_SHORT;<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>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public short getRowLength() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return rowLength;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    public int getFamilyOffset() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return familyOffset;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public byte getFamilyLength() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return familyLength;<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public int getQualifierOffset() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return qualifierOffset;<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>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public int getQualifierLength() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return qualifierLength;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    public long getTimestamp() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return timestamp;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    public byte getTypeByte() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return typeByte;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public long getSequenceId() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return seqId;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public byte[] getValueArray() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return this.valueBuffer;<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>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public int getValueOffset() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      return valueOffset;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    public int getValueLength() {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return valueLength;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public byte[] getTagsArray() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return this.tagsBuffer;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public int getTagsOffset() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return this.tagsOffset;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public int getTagsLength() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return tagsLength;<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>    @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    public void setSequenceId(long seqId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.seqId = seqId;<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>    @Override<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public long heapSize() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    public int write(OutputStream out) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return write(out, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          tagsLength, withTags);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // Write key<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      out.write(keyOnlyBuffer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // Write value<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (withTags) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        // 2 bytes tags length followed by tags bytes<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      SettableSequenceId, Streamable {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.BYTE_BUFFER));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private ByteBuffer keyBuffer;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    private short rowLength;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    private int familyOffset;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private byte familyLength;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private int qualifierOffset;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    private int qualifierLength;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private long timestamp;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    private byte typeByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private ByteBuffer valueBuffer;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    private int valueOffset;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    private int valueLength;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    private ByteBuffer tagsBuffer;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    private int tagsOffset;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    private int tagsLength;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    private long seqId;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    protected OffheapDecodedCell(ByteBuffer keyBuffer, short rowLength, int familyOffset,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        ByteBuffer valueBuffer, int valueOffset, int valueLen, long seqId, ByteBuffer tagsBuffer,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        int tagsOffset, int tagsLength) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // The keyBuffer is always onheap<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      assert keyBuffer.hasArray();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      assert keyBuffer.arrayOffset() == 0;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this.keyBuffer = keyBuffer;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.rowLength = rowLength;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      this.familyOffset = familyOffset;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      this.familyLength = familyLength;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.qualifierOffset = qualOffset;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.qualifierLength = qualLength;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.timestamp = timeStamp;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.typeByte = typeByte;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.valueBuffer = valueBuffer;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.valueOffset = valueOffset;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      this.valueLength = valueLen;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      this.tagsBuffer = tagsBuffer;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.tagsOffset = tagsOffset;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.tagsLength = tagsLength;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      setSequenceId(seqId);<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>    @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public byte[] getRowArray() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      return this.keyBuffer.array();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public int getRowOffset() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return getRowPosition();<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>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public short getRowLength() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.rowLength;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public byte[] getFamilyArray() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.keyBuffer.array();<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>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public int getFamilyOffset() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      return getFamilyPosition();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public byte getFamilyLength() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.familyLength;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public byte[] getQualifierArray() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.keyBuffer.array();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @Override<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    public int getQualifierOffset() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return getQualifierPosition();<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>    @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    public int getQualifierLength() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.qualifierLength;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public long getTimestamp() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.timestamp;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public byte getTypeByte() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      return this.typeByte;<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>    @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    public long getSequenceId() {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      return this.seqId;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    public byte[] getValueArray() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      return CellUtil.cloneValue(this);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public int getValueOffset() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      return 0;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>    @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    public int getValueLength() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.valueLength;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    public byte[] getTagsArray() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return CellUtil.cloneTags(this);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    public int getTagsOffset() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return 0;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public int getTagsLength() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      return this.tagsLength;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    public ByteBuffer getRowByteBuffer() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.keyBuffer;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    public int getRowPosition() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      return Bytes.SIZEOF_SHORT;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    public ByteBuffer getFamilyByteBuffer() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return this.keyBuffer;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    @Override<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    public int getFamilyPosition() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.familyOffset;<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>    @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    public ByteBuffer getQualifierByteBuffer() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return this.keyBuffer;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>    @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    public int getQualifierPosition() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      return this.qualifierOffset;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    @Override<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    public ByteBuffer getValueByteBuffer() {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.valueBuffer;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    @Override<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public int getValuePosition() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return this.valueOffset;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    @Override<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    public ByteBuffer getTagsByteBuffer() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      return this.tagsBuffer;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    @Override<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    public int getTagsPosition() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.tagsOffset;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public long heapSize() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>    @Override<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    public void setSequenceId(long seqId) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      this.seqId = seqId;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    @Override<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    public int write(OutputStream out) throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return write(out, true);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          tagsLength, withTags);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      ByteBufferUtils.putInt(out, keyBuffer.capacity());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Write key<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      out.write(keyBuffer.array());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Write value<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      ByteBufferUtils.copyBufferToStream(out, this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (withTags) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // 2 bytes tags length followed by tags bytes<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        ByteBufferUtils.copyBufferToStream(out, this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      return lenToWrite + Bytes.SIZEOF_INT;<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>  protected abstract static class<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      BufferedEncodedSeeker&lt;STATE extends SeekerState&gt;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      implements EncodedSeeker {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    protected HFileBlockDecodingContext decodingCtx;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    protected final CellComparator comparator;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    protected ByteBuff currentBuffer;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    protected TagCompressionContext tagCompressionContext = null;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    protected  KeyValue.KeyOnlyKeyValue keyOnlyKV = new KeyValue.KeyOnlyKeyValue();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // many object creations.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    protected STATE current, previous;<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    public BufferedEncodedSeeker(CellComparator comparator,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        HFileBlockDecodingContext decodingCtx) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      this.comparator = comparator;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      this.decodingCtx = decodingCtx;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (decodingCtx.getHFileContext().isCompressTags()) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        try {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          tagCompressionContext = new TagCompressionContext(LRUDictionary.class, Byte.MAX_VALUE);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        } catch (Exception e) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          throw new RuntimeException("Failed to initialize TagCompressionContext", e);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      current = createSeekerState(); // always valid<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      previous = createSeekerState(); // may not be valid<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    protected boolean includesMvcc() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    protected boolean includesTags() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    @Override<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    public int compareKey(CellComparator comparator, Cell key) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      keyOnlyKV.setKey(current.keyBuffer, 0, current.keyLength);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      return comparator.compareKeyIgnoresMvcc(key, keyOnlyKV);<a name="line.730"></a>
+<span class="sourceLineNo">431</span>    public String toString() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    public void setSequenceId(long seqId) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      this.seqId = seqId;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public long heapSize() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<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>    @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    public int write(OutputStream out) throws IOException {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return write(out, true);<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>    @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          tagsLength, withTags);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      // Write key<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      out.write(keyOnlyBuffer);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      // Write value<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (withTags) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        // 2 bytes tags length followed by tags bytes<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      SettableSequenceId, Streamable {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    private static final long FIXED_OVERHEAD = ClassSiz

<TRUNCATED>

[30/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
index c1eb6ba..577f795 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
@@ -909,136 +909,141 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTunerChore.html#org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html#org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>
+<div class="block">Every class that wants to observe heap memory tune actions must implement this interface.</div>
+</td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTunerChore.html#org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.TunerContext.html#org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerContext</a>
 <div class="block">POJO to pass all the relevant information required to do the heap memory tuning.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.TunerResult.html#org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerResult</a>
 <div class="block">POJO which holds the result of memory tuning done by HeapMemoryTuner implementation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryTuner.html#org.apache.hadoop.hbase.regionserver">HeapMemoryTuner</a>
 <div class="block">Makes the decision regarding proper sizing of the heap memory.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HMobStore.html#org.apache.hadoop.hbase.regionserver">HMobStore</a>
 <div class="block">The store implementation to save MOBs (medium objects), it extends the HStore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.html#org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.BatchOperation.html#org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>
 <div class="block">Struct-like class that tracks the progress of a batch operation,
  accumulating status codes and tracking the index at which processing
  is proceeding.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.PrepareFlushResult.html#org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>
 <div class="block">A result object from prepare flush cache stage</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.RegionScannerImpl.html#org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>
 <div class="block">RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.RowLockContext.html#org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.RowLockImpl.html#org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>
 <div class="block">Class used to represent a lock on a row.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegion.WriteState.html#org.apache.hadoop.hbase.regionserver">HRegion.WriteState</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegionFileSystem.html#org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>
 <div class="block">View to an on-disk Region.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegionServer.html#org.apache.hadoop.hbase.regionserver">HRegionServer</a>
 <div class="block">HRegionServer makes a set of HRegions available to clients.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegionServer.MovedRegionInfo.html#org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HRegionServer.MovedRegionsCleaner.html#org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>
 <div class="block">Creates a Chore thread to clean the moved region cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/HStore.html#org.apache.hadoop.hbase.regionserver">HStore</a>
 <div class="block">A Store holds a column family in a Region.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.html#org.apache.hadoop.hbase.regionserver">ImmutableSegment</a>
 <div class="block">ImmutableSegment is an abstract class that extends the API supported by a <a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Segment</code></a>,
  and is not needed for a <a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver"><code>MutableSegment</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.Type.html#org.apache.hadoop.hbase.regionserver">ImmutableSegment.Type</a>
 <div class="block">Types of ImmutableSegment</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/IncreasingToUpperBoundRegionSplitPolicy.html#org.apache.hadoop.hbase.regionserver">IncreasingToUpperBoundRegionSplitPolicy</a>
 <div class="block">Split size is the number of regions that are on this server that all are
  of the same table, cubed, times 2x the region flush size OR the maximum
  region split size, whichever is smaller.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/InternalScanner.html#org.apache.hadoop.hbase.regionserver">InternalScanner</a>
 <div class="block">Internal scanners differ from client-side scanners in that they operate on
  HStoreKeys and byte[] instead of RowResults.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/KeyValueHeap.html#org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>
 <div class="block">Implements a heap merge across any number of KeyValueScanners.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/KeyValueHeap.KVScannerComparator.html#org.apache.hadoop.hbase.regionserver">KeyValueHeap.KVScannerComparator</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html#org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>
 <div class="block">Scanner that returns the next KeyValue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/LastSequenceId.html#org.apache.hadoop.hbase.regionserver">LastSequenceId</a>
 <div class="block">Last flushed sequence Ids for the regions and their stores on region server</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/LeaseException.html#org.apache.hadoop.hbase.regionserver">LeaseException</a>
 <div class="block">Reports a problem with a lease</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/LeaseListener.html#org.apache.hadoop.hbase.regionserver">LeaseListener</a>
 <div class="block">LeaseListener is an interface meant to be implemented by users of the Leases
  class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Leases.html#org.apache.hadoop.hbase.regionserver">Leases</a>
 <div class="block">Leases
 
@@ -1046,59 +1051,59 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  clients that occasionally send heartbeats.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Leases.Lease.html#org.apache.hadoop.hbase.regionserver">Leases.Lease</a>
 <div class="block">This class tracks a single Lease.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Leases.LeaseStillHeldException.html#org.apache.hadoop.hbase.regionserver">Leases.LeaseStillHeldException</a>
 <div class="block">Thrown if we are asked to create a lease but lease on passed name already
  exists.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/LogRoller.html#org.apache.hadoop.hbase.regionserver">LogRoller</a>
 <div class="block">Runs periodically to determine if the WAL should be rolled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/LruHashMap.Entry.html#org.apache.hadoop.hbase.regionserver">LruHashMap.Entry</a>
 <div class="block">Entry to store key/value mappings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStore.html#org.apache.hadoop.hbase.regionserver">MemStore</a>
 <div class="block">The MemStore holds in-memory modifications to the Store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreChunkPool.html#org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a>
-<div class="block">A pool of <code>HeapMemStoreLAB.Chunk</code> instances.</div>
+<div class="block">A pool of <a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreChunkPool.PooledChunk.html#org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreCompactor.html#org.apache.hadoop.hbase.regionserver">MemStoreCompactor</a>
 <div class="block">The ongoing MemStore Compaction manager, dispatches a solo running compaction and interrupts
  the compaction if requested.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreCompactor.Type.html#org.apache.hadoop.hbase.regionserver">MemStoreCompactor.Type</a>
 <div class="block">Types of Compaction</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreCompactorIterator.html#org.apache.hadoop.hbase.regionserver">MemStoreCompactorIterator</a>
 <div class="block">The MemStoreCompactorIterator is designed to perform one iteration over given list of segments
  For another iteration new instance of MemStoreCompactorIterator needs to be created
  The iterator is not thread-safe and must have only one instance in each period of time</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreFlusher.html#org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a>
 <div class="block">Thread that flushes cache on request
 
@@ -1107,582 +1112,579 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  sleep time which is invariant.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreFlusher.FlushHandler.html#org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushHandler</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreFlusher.FlushQueueEntry.html#org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreFlusher.FlushRegionEntry.html#org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>
 <div class="block">Datastructure used in the flush queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreLAB.html#org.apache.hadoop.hbase.regionserver">MemStoreLAB</a>
 <div class="block">A memstore-local allocation buffer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreScanner.Type.html#org.apache.hadoop.hbase.regionserver">MemStoreScanner.Type</a>
 <div class="block">Types of cell MemStoreScanner</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MemStoreSnapshot.html#org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a>
 <div class="block">Holds details of the snapshot taken on a MemStore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsHeapMemoryManager.html#org.apache.hadoop.hbase.regionserver">MetricsHeapMemoryManager</a>
 <div class="block">This class is for maintaining the various regionserver's heap memory manager statistics and
  publishing them through the metrics interfaces.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsHeapMemoryManagerSource.html#org.apache.hadoop.hbase.regionserver">MetricsHeapMemoryManagerSource</a>
 <div class="block">This interface will be implemented by a MetricsSource that will export metrics from
  HeapMemoryManager in RegionServer into the hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsHeapMemoryManagerSourceImpl.html#org.apache.hadoop.hbase.regionserver">MetricsHeapMemoryManagerSourceImpl</a>
 <div class="block">Hadoop2 implementation of MetricsHeapMemoryManagerSource.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegion.html#org.apache.hadoop.hbase.regionserver">MetricsRegion</a>
 <div class="block">This is the glue between the HRegion and whatever hadoop shim layer
  is loaded (hbase-hadoop1-compat or hbase-hadoop2-compat).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionAggregateSource.html#org.apache.hadoop.hbase.regionserver">MetricsRegionAggregateSource</a>
 <div class="block">This interface will be implemented by a MetricsSource that will export metrics from
  multiple regions into the hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionAggregateSourceImpl.html#org.apache.hadoop.hbase.regionserver">MetricsRegionAggregateSourceImpl</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServer.html#org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>
 <div class="block">
  This class is for maintaining the various regionserver statistics
  and publishing them through the metrics interfaces.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerSource.html#org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a>
 <div class="block">Interface for classes that expose metrics about the regionserver.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerSourceFactory.html#org.apache.hadoop.hbase.regionserver">MetricsRegionServerSourceFactory</a>
 <div class="block">Interface of a factory to create Metrics Sources used inside of regionservers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html#org.apache.hadoop.hbase.regionserver">MetricsRegionServerSourceFactoryImpl.FactoryStorage</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerWrapper.html#org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>
 <div class="block">This is the interface that will expose RegionServer information to hadoop1/hadoop2
  implementations of the MetricsRegionServerSource.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionSource.html#org.apache.hadoop.hbase.regionserver">MetricsRegionSource</a>
 <div class="block">This interface will be implemented to allow single regions to push metrics into
  MetricsRegionAggregateSource that will in turn push data to the Hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionWrapper.html#org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a>
 <div class="block">Interface of class that will wrap an HRegion and export numbers so they can be
  used in MetricsRegionSource</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionWrapperImpl.html#org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsTable.html#org.apache.hadoop.hbase.regionserver">MetricsTable</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsTableAggregateSource.html#org.apache.hadoop.hbase.regionserver">MetricsTableAggregateSource</a>
 <div class="block">This interface will be implemented by a MetricsSource that will export metrics from
  multiple regions of a table into the hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsTableAggregateSourceImpl.html#org.apache.hadoop.hbase.regionserver">MetricsTableAggregateSourceImpl</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsTableSource.html#org.apache.hadoop.hbase.regionserver">MetricsTableSource</a>
 <div class="block">This interface will be implemented to allow region server to push table metrics into
  MetricsRegionAggregateSource that will in turn push data to the Hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsTableWrapperAggregate.html#org.apache.hadoop.hbase.regionserver">MetricsTableWrapperAggregate</a>
 <div class="block">Interface of class that will wrap a MetricsTableSource and export numbers so they can be
  used in MetricsTableSource</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MetricsTableWrapperAggregateImpl.MetricsTableValues.html#org.apache.hadoop.hbase.regionserver">MetricsTableWrapperAggregateImpl.MetricsTableValues</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MiniBatchOperationInProgress.html#org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>
 <div class="block">Wraps together the mutations which are applied as a batch to the region and their operation
  status and WALEdits.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MultiVersionConcurrencyControl.html#org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a>
 <div class="block">Manages the read/write consistency.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MultiVersionConcurrencyControl.WriteEntry.html#org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>
 <div class="block">Write number and whether write has completed given out at start of a write transaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/MutableSegment.html#org.apache.hadoop.hbase.regionserver">MutableSegment</a>
 <div class="block">A mutable segment in memstore, specifically the active segment.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/NonLazyKeyValueScanner.html#org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a>
 <div class="block">A "non-lazy" scanner which always does a real seek operation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/NonReversedNonLazyKeyValueScanner.html#org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>
 <div class="block">A "non-reversed &amp; non-lazy" scanner which does not support backward scanning
  and always does a real seek operation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/NoSuchColumnFamilyException.html#org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a>
 <div class="block">Thrown if request for nonexistent column family.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/OnlineRegions.html#org.apache.hadoop.hbase.regionserver">OnlineRegions</a>
 <div class="block">Interface to Map of online regions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/OperationStatus.html#org.apache.hadoop.hbase.regionserver">OperationStatus</a>
 <div class="block">This class stores the Operation status code and the exception message
  that occurs in case of failure of operations like put, delete, etc.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Region.html#org.apache.hadoop.hbase.regionserver">Region</a>
 <div class="block">Regions store data for a certain region of a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Region.BulkLoadListener.html#org.apache.hadoop.hbase.regionserver">Region.BulkLoadListener</a>
 <div class="block">Listener class to enable callers of
  bulkLoadHFile() to perform any necessary
  pre/post processing of a given bulkload call</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Region.FlushResult.html#org.apache.hadoop.hbase.regionserver">Region.FlushResult</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Region.FlushResult.Result.html#org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Region.Operation.html#org.apache.hadoop.hbase.regionserver">Region.Operation</a>
 <div class="block">Operation enum is used in <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation()"><code>Region.startRegionOperation()</code></a> and elsewhere to provide
  context for various checks.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Region.RowLock.html#org.apache.hadoop.hbase.regionserver">Region.RowLock</a>
 <div class="block">Row lock held by a given thread.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>
 <div class="block">Implements the coprocessor environment and runtime support for coprocessors
  loaded within a <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver"><code>Region</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.CoprocessorOperation.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.CoprocessorOperation</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.EndpointOperation.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.EndpointOperation</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.EndpointOperationWithResult.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.EndpointOperationWithResult</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.RegionEnvironment.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.RegionEnvironment</a>
 <div class="block">Encapsulation of the environment of each coprocessor</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.RegionOperation.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.RegionOperation</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.RegionOperationWithResult.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.RegionOperationWithResult</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionCoprocessorHost.TableCoprocessorAttribute.html#org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.TableCoprocessorAttribute</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionMergeTransaction.html#org.apache.hadoop.hbase.regionserver">RegionMergeTransaction</a>
 <div class="block">Executes region merge as a "transaction".</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionMergeTransaction.JournalEntry.html#org.apache.hadoop.hbase.regionserver">RegionMergeTransaction.JournalEntry</a>
 <div class="block">Split transaction journal entry</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionMergeTransaction.RegionMergeTransactionPhase.html#org.apache.hadoop.hbase.regionserver">RegionMergeTransaction.RegionMergeTransactionPhase</a>
 <div class="block">Each enum is a step in the merge transaction.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionMergeTransaction.TransactionListener.html#org.apache.hadoop.hbase.regionserver">RegionMergeTransaction.TransactionListener</a>
 <div class="block">Split transaction listener</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionMergeTransactionImpl.html#org.apache.hadoop.hbase.regionserver">RegionMergeTransactionImpl</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionOpeningState.html#org.apache.hadoop.hbase.regionserver">RegionOpeningState</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionScanner.html#org.apache.hadoop.hbase.regionserver">RegionScanner</a>
 <div class="block">RegionScanner describes iterators over rows in an HRegion.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerAccounting.html#org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>
 <div class="block">RegionServerAccounting keeps record of some basic real time information about
  the Region Server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerCoprocessorHost.html#org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerCoprocessorHost.CoprocessOperationWithResult.html#org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost.CoprocessOperationWithResult</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerCoprocessorHost.CoprocessorOperation.html#org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost.CoprocessorOperation</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerCoprocessorHost.RegionServerEnvironment.html#org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost.RegionServerEnvironment</a>
 <div class="block">Coprocessor environment extension providing access to region server
  related services.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerServices.html#org.apache.hadoop.hbase.regionserver">RegionServerServices</a>
 <div class="block">Services provided by <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionServer</code></a></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerServices.PostOpenDeployContext.html#org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>
 <div class="block">Context for postOpenDeployTasks().</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerServices.RegionStateTransitionContext.html#org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServerStoppedException.html#org.apache.hadoop.hbase.regionserver">RegionServerStoppedException</a>
 <div class="block">Thrown by the region server when it is in shutting down state.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionServicesForStores.html#org.apache.hadoop.hbase.regionserver">RegionServicesForStores</a>
 <div class="block">Services a Store needs from a Region.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RegionSplitPolicy.html#org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>
 <div class="block">A split policy determines when a region should be split.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationService.html#org.apache.hadoop.hbase.regionserver">ReplicationService</a>
 <div class="block">Gateway to Cluster Replication.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html#org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>
 <div class="block">A sink for a replication stream has to expose this service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationSourceService.html#org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>
 <div class="block">A source for a replication stream has to expose this service.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReversedKeyValueHeap.html#org.apache.hadoop.hbase.regionserver">ReversedKeyValueHeap</a>
 <div class="block">ReversedKeyValueHeap is used for supporting reversed scanning.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReversedStoreScanner.html#org.apache.hadoop.hbase.regionserver">ReversedStoreScanner</a>
 <div class="block">ReversedStoreScanner extends from StoreScanner, and is used to support
  reversed scanning.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RowProcessor.html#org.apache.hadoop.hbase.regionserver">RowProcessor</a>
 <div class="block">Defines the procedure to atomically perform multiple scans and mutations
  on a HRegion.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RpcSchedulerFactory.html#org.apache.hadoop.hbase.regionserver">RpcSchedulerFactory</a>
 <div class="block">A factory class that constructs an <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc"><code>RpcScheduler</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RSRpcServices.html#org.apache.hadoop.hbase.regionserver">RSRpcServices</a>
 <div class="block">Implements the regionserver RPC services.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RSRpcServices.RegionScannerHolder.html#org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>
 <div class="block">Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/RSRpcServices.RegionScannersCloseCallBack.html#org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannersCloseCallBack</a>
 <div class="block">An RpcCallBack that creates a list of scanners that needs to perform callBack operation on
  completion of multiGets.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScanInfo.html#org.apache.hadoop.hbase.regionserver">ScanInfo</a>
 <div class="block">Immutable information for scans over a store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScannerContext.html#org.apache.hadoop.hbase.regionserver">ScannerContext</a>
 <div class="block">ScannerContext instances encapsulate limit tracking AND progress towards those limits during
  invocations of <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)"><code>InternalScanner.next(java.util.List)</code></a> and
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)"><code>InternalScanner.next(java.util.List)</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScannerContext.Builder.html#org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScannerContext.LimitFields.html#org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a>
 <div class="block">The different fields that can be used as limits in calls to
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)"><code>InternalScanner.next(java.util.List)</code></a> and <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)"><code>InternalScanner.next(java.util.List)</code></a></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScannerContext.LimitScope.html#org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>
 <div class="block">The various scopes where a limit can be enforced.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScannerContext.NextState.html#org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>
 <div class="block">The possible states a scanner may be in following a call to <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)"><code>InternalScanner.next(List)</code></a></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ScanType.html#org.apache.hadoop.hbase.regionserver">ScanType</a>
 <div class="block">Enum to distinguish general scan types.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SecureBulkLoadManager.html#org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a>
 <div class="block">Bulk loads in secure mode.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Segment.html#org.apache.hadoop.hbase.regionserver">Segment</a>
 <div class="block">This is an abstraction of a segment maintained in a memstore, e.g., the active
  cell set or its snapshot.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SegmentFactory.html#org.apache.hadoop.hbase.regionserver">SegmentFactory</a>
 <div class="block">A singleton store segment factory.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SegmentScanner.html#org.apache.hadoop.hbase.regionserver">SegmentScanner</a>
 <div class="block">A scanner of a single memstore segment.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ServerNonceManager.html#org.apache.hadoop.hbase.regionserver">ServerNonceManager</a>
 <div class="block">Implementation of nonce manager that stores nonces in a hash map and cleans them up after
  some time; if nonce group/client ID is supplied, nonces are stored by client ID.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ServerNonceManager.OperationContext.html#org.apache.hadoop.hbase.regionserver">ServerNonceManager.OperationContext</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Shipper.html#org.apache.hadoop.hbase.regionserver">Shipper</a>
 <div class="block">This interface denotes a scanner as one which can ship cells.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitLogWorker.html#org.apache.hadoop.hbase.regionserver">SplitLogWorker</a>
 <div class="block">This worker is spawned in every regionserver, including master.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitLogWorker.TaskExecutor.html#org.apache.hadoop.hbase.regionserver">SplitLogWorker.TaskExecutor</a>
 <div class="block">Objects implementing this interface actually do the task that has been
  acquired by a <a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><code>SplitLogWorker</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitLogWorker.TaskExecutor.Status.html#org.apache.hadoop.hbase.regionserver">SplitLogWorker.TaskExecutor.Status</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitTransaction.html#org.apache.hadoop.hbase.regionserver">SplitTransaction</a>
 <div class="block">Executes region split as a "transaction".</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitTransaction.JournalEntry.html#org.apache.hadoop.hbase.regionserver">SplitTransaction.JournalEntry</a>
 <div class="block">Split transaction journal entry</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitTransaction.SplitTransactionPhase.html#org.apache.hadoop.hbase.regionserver">SplitTransaction.SplitTransactionPhase</a>
 <div class="block">Each enum is a step in the split transaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/SplitTransaction.TransactionListener.html#org.apache.hadoop.hbase.regionserver">SplitTransaction.TransactionListener</a>
 <div class="block">Split transaction listener</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/Store.html#org.apache.hadoop.hbase.regionserver">Store</a>
 <div class="block">Interface for objects that hold a column family in a Region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreConfigInformation.html#org.apache.hadoop.hbase.regionserver">StoreConfigInformation</a>
 <div class="block">A more restricted interface for HStore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreEngine.html#org.apache.hadoop.hbase.regionserver">StoreEngine</a>
 <div class="block">StoreEngine is a factory that can create the objects necessary for HStore to operate.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFile.html#org.apache.hadoop.hbase.regionserver">StoreFile</a>
 <div class="block">A Store data file.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFileInfo.html#org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>
 <div class="block">Describe a StoreFile (hfile, reference, link)</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFileManager.html#org.apache.hadoop.hbase.regionserver">StoreFileManager</a>
 <div class="block">Manages the store files and basic metadata about that that determines the logical structure
  (e.g.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFileReader.html#org.apache.hadoop.hbase.regionserver">StoreFileReader</a>
 <div class="block">Reader for a StoreFile.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StorefileRefresherChore.html#org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a>
 <div class="block">A chore for refreshing the store files for secondary regions hosted in the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFileScanner.html#org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>
 <div class="block">KeyValueScanner adaptor over the Reader.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFileWriter.html#org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>
 <div class="block">A StoreFile writer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFileWriter.Builder.html#org.apache.hadoop.hbase.regionserver">StoreFileWriter.Builder</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFlushContext.html#org.apache.hadoop.hbase.regionserver">StoreFlushContext</a>
 <div class="block">A package protected interface for a store flushing.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreFlusher.html#org.apache.hadoop.hbase.regionserver">StoreFlusher</a>
 <div class="block">Store flusher interface.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreScanner.html#org.apache.hadoop.hbase.regionserver">StoreScanner</a>
 <div class="block">Scanner scans both the memstore and the Store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StoreScanner.StoreScannerCompactionRace.html#org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StripeMultiFileWriter.html#org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter</a>
 <div class="block">Base class for cell sink that separates the provided cells into multiple files for stripe
  compaction.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StripeStoreConfig.html#org.apache.hadoop.hbase.regionserver">StripeStoreConfig</a>
 <div class="block">Configuration class for stripe store and compactions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StripeStoreFileManager.html#org.apache.hadoop.hbase.regionserver">StripeStoreFileManager</a>
 <div class="block">Stripe implementation of StoreFileManager.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StripeStoreFileManager.State.html#org.apache.hadoop.hbase.regionserver">StripeStoreFileManager.State</a>
 <div class="block">The state class.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/StripeStoreFlusher.StripeFlushRequest.html#org.apache.hadoop.hbase.regionserver">StripeStoreFlusher.StripeFlushRequest</a>
 <div class="block">Stripe flush request wrapper that writes a non-striped file.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/TimeRangeTracker.html#org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a>
 <div class="block">Stores minimum and maximum timestamp values.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html#org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/VersionedSegmentsList.html#org.apache.hadoop.hbase.regionserver">VersionedSegmentsList</a>
 <div class="block">A list of segment managers coupled with the version of the memstore (version at the time it was

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 446e243..b94431d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -113,9 +113,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="strong">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="strong">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="strong">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="strong">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="strong">DeleteTracker.DeleteCompare</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html b/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html
index c2e30eb..cc130ab 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html
@@ -248,6 +248,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.html b/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.html
index 644ace5..53ecd52 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.html
@@ -238,6 +238,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseLo
 <code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html#isFileDeletable(org.apache.hadoop.fs.FileStatus)">isFileDeletable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html#isLogDeletable(org.apache.hadoop.fs.FileStatus)">isLogDeletable</a></code></li>
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 00d2201..546973c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -101,8 +101,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 a757cf0..80494c8 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -139,9 +139,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">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="strong">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="strong">Permission.Action</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 4d3ad9b..e19b1dd 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -164,9 +164,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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="strong">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="strong">ThriftServerRunner.ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="strong">MetricsThriftServerSourceFactoryImpl.FactoryStorage</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="strong">ThriftMetrics.ThriftServerType</span></a></li>
 </ul>
 </li>
 </ul>


[42/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
new file mode 100644
index 0000000..16d661e
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
@@ -0,0 +1,718 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RowIndexSeekerV1 (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="RowIndexSeekerV1 (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexSeekerV1.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.io.encoding</div>
+<h2 title="Class RowIndexSeekerV1" class="title">Class RowIndexSeekerV1</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></dd>
+</dl>
+<hr>
+<br>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.39">RowIndexSeekerV1</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#comparator">comparator</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#current">current</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#currentBuffer">currentBuffer</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodingCtx">decodingCtx</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#previous">previous</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#rowNumber">rowNumber</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#rowOffsets">rowOffsets</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#tmpPair">tmpPair</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#RowIndexSeekerV1(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">RowIndexSeekerV1</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                                <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#binarySearch(org.apache.hadoop.hbase.Cell,%20boolean)">binarySearch</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+                        boolean&nbsp;seekBefore)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                    <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)</code>
+<div class="block">Compare the given key against the current key</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareRows(java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Cell)">compareRows</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
+                      <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeAtPosition(int)">decodeAtPosition</a></strong>(int&nbsp;position)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeFirst()">decodeFirst</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeNext()">decodeNext</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeTags()">decodeTags</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getCell()">getCell</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getKey()">getKey</a></strong>()</code>
+<div class="block">From the current position creates a cell using the key part
+ of the current buffer</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getRow(int)">getRow</a></strong>(int&nbsp;index)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getValueShallowCopy()">getValueShallowCopy</a></strong>()</code>
+<div class="block">Does a shallow copy of the value at the current position.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#includesMvcc()">includesMvcc</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#includesTags()">includesTags</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#moveToPrevious()">moveToPrevious</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#next()">next</a></strong>()</code>
+<div class="block">Move to next position</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#rewind()">rewind</a></strong>()</code>
+<div class="block">Set position to beginning of given block</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">seekToKeyInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+                                boolean&nbsp;seekBefore)</code>
+<div class="block">Moves the seeker position within the current block to:
+
+ the last key that that is less than or equal to the given key if
+ <code>seekBefore</code> is false
+ the last key that is strictly less than the given key if <code>
+ seekBefore</code> is true.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">setCurrentBuffer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</code>
+<div class="block">Set on which buffer there will be done seeking.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="decodingCtx">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>decodingCtx</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.41">decodingCtx</a></pre>
+</li>
+</ul>
+<a name="comparator">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>comparator</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.42">comparator</a></pre>
+</li>
+</ul>
+<a name="tmpPair">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tmpPair</h4>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.46">tmpPair</a></pre>
+</li>
+</ul>
+<a name="currentBuffer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>currentBuffer</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.48">currentBuffer</a></pre>
+</li>
+</ul>
+<a name="current">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>current</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.49">current</a></pre>
+</li>
+</ul>
+<a name="previous">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>previous</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.50">previous</a></pre>
+</li>
+</ul>
+<a name="rowNumber">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rowNumber</h4>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.52">rowNumber</a></pre>
+</li>
+</ul>
+<a name="rowOffsets">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rowOffsets</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.53">rowOffsets</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="RowIndexSeekerV1(org.apache.hadoop.hbase.CellComparator, org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>RowIndexSeekerV1</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.55">RowIndexSeekerV1</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setCurrentBuffer</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.62">setCurrentBuffer</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">Set on which buffer there will be done seeking.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">setCurrentBuffer</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>buffer</code> - Used for seeking.</dd></dl>
+</li>
+</ul>
+<a name="getKey()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getKey</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.85">getKey</a>()</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getKey()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">From the current position creates a cell using the key part
+ of the current buffer</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getKey()">getKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>key at current position</dd></dl>
+</li>
+</ul>
+<a name="getValueShallowCopy()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getValueShallowCopy</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.99">getValueShallowCopy</a>()</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getValueShallowCopy()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">Does a shallow copy of the value at the current position. A shallow
+ copy is possible because the returned buffer refers to the backing array
+ of the original encoded buffer.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getValueShallowCopy()">getValueShallowCopy</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>value at current position</dd></dl>
+</li>
+</ul>
+<a name="getCell()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCell</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.109">getCell</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getCell()">getCell</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>the Cell at the current position. Includes memstore timestamp.</dd></dl>
+</li>
+</ul>
+<a name="rewind()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rewind</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.114">rewind</a>()</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#rewind()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">Set position to beginning of given block</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#rewind()">rewind</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="next()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>next</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.120">next</a>()</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#next()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">Move to next position</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#next()">next</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>true on success, false if there is no more positions.</dd></dl>
+</li>
+</ul>
+<a name="binarySearch(org.apache.hadoop.hbase.Cell, boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>binarySearch</h4>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.129">binarySearch</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+               boolean&nbsp;seekBefore)</pre>
+</li>
+</ul>
+<a name="compareRows(java.nio.ByteBuffer, org.apache.hadoop.hbase.Cell)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>compareRows</h4>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.159">compareRows</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
+              <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell)</pre>
+</li>
+</ul>
+<a name="getRow(int)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getRow</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.172">getRow</a>(int&nbsp;index)</pre>
+</li>
+</ul>
+<a name="seekToKeyInBlock(org.apache.hadoop.hbase.Cell, boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>seekToKeyInBlock</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.184">seekToKeyInBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+                   boolean&nbsp;seekBefore)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">Moves the seeker position within the current block to:
+ <ul>
+ <li>the last key that that is less than or equal to the given key if
+ <code>seekBefore</code> is false</li>
+ <li>the last key that is strictly less than the given key if <code>
+ seekBefore</code> is true. The caller is responsible for loading the
+ previous block if the requested key turns out to be the first key of the
+ current block.</li>
+ </ul></div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">seekToKeyInBlock</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>seekCell</code> - - Cell to which the seek should happen</dd><dd><code>seekBefore</code> - find the key strictly less than the given key in case
+          of an exact match. Does not matter in case of an inexact match.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>0 on exact match, 1 on inexact match.</dd></dl>
+</li>
+</ul>
+<a name="moveToPrevious()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>moveToPrevious</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.235">moveToPrevious</a>()</pre>
+</li>
+</ul>
+<a name="compareKey(org.apache.hadoop.hbase.CellComparator, org.apache.hadoop.hbase.Cell)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>compareKey</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.250">compareKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+             <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
+<div class="block">Compare the given key against the current key</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>-1 is the passed key is smaller than the current key, 0 if equal and 1 if greater</dd></dl>
+</li>
+</ul>
+<a name="decodeFirst()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>decodeFirst</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.254">decodeFirst</a>()</pre>
+</li>
+</ul>
+<a name="decodeAtPosition(int)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>decodeAtPosition</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.259">decodeAtPosition</a>(int&nbsp;position)</pre>
+</li>
+</ul>
+<a name="decodeNext()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>decodeNext</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.265">decodeNext</a>()</pre>
+</li>
+</ul>
+<a name="includesMvcc()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includesMvcc</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.296">includesMvcc</a>()</pre>
+</li>
+</ul>
+<a name="includesTags()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includesTags</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.300">includesTags</a>()</pre>
+</li>
+</ul>
+<a name="decodeTags()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>decodeTags</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.304">decodeTags</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexSeekerV1.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.EncodedSeeker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.EncodedSeeker.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.EncodedSeeker.html
index ee9b28e..9a840f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.EncodedSeeker.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.EncodedSeeker.html
@@ -146,6 +146,10 @@
 <td class="colFirst"><code>protected static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>&lt;STATE extends <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&gt;</strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -162,22 +166,27 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                        <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>
 <div class="block">Create a HFileBlock seeker which find KeyValues within a block.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">FastDiffDeltaEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">PrefixKeyDeltaEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">DiffKeyDeltaEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.html
index 45d8098..9e0a85e 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoder.html
@@ -171,6 +171,12 @@
  and storing raw size of rest.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></strong></code>
+<div class="block">Store cells following every row's start offset, so we can binary search to a row's cells.</div>
+</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoding.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoding.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoding.html
index 3dd1718..0e429a1 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoding.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/DataBlockEncoding.html
@@ -233,12 +233,18 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
                                                       byte[]&nbsp;header,
                                                       <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+                                                      byte[]&nbsp;header,
+                                                      <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
                                                       byte[]&nbsp;headerBytes,
                                                       <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/EncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/EncodingState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/EncodingState.html
index 3d1d2f6..5fe6026 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/EncodingState.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/EncodingState.html
@@ -120,6 +120,10 @@
 <td class="colFirst"><code>private static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1.RowIndexEncodingState</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDecodingContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDecodingContext.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDecodingContext.html
index a24194b..6599355 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDecodingContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDecodingContext.html
@@ -174,6 +174,10 @@
 <td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#decodingCtx">decodingCtx</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodingCtx">decodingCtx</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -185,10 +189,14 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>
 <div class="block">Creates an encoder specific decoding context, which will prepare the data
  before actual decoding</div>
@@ -210,26 +218,36 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                        <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>
 <div class="block">Create a HFileBlock seeker which find KeyValues within a block.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">FastDiffDeltaEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">PrefixKeyDeltaEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">DiffKeyDeltaEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#decodeKeyValues(java.io.DataInputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">decodeKeyValues</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
+                              <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#decodeKeyValues(java.io.DataInputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">decodeKeyValues</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
@@ -254,6 +272,10 @@
 <td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#BufferedDataBlockEncoder.BufferedEncodedSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                                                                                             <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#RowIndexSeekerV1(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">RowIndexSeekerV1</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                                <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDefaultEncodingContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDefaultEncodingContext.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDefaultEncodingContext.html
index 344c9be..f8db504 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDefaultEncodingContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockDefaultEncodingContext.html
@@ -94,6 +94,19 @@
 <!--   -->
 </a>
 <h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a> in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a></code></td>
+<td class="colLast"><span class="strong">RowIndexEncoderV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#encodingCtx">encodingCtx</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
@@ -139,6 +152,18 @@
 </tr>
 </tbody>
 </table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#RowIndexEncoderV1(java.io.DataOutputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext)">RowIndexEncoderV1</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
+                                  <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.io.hfile">
 <!--   -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockEncodingContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockEncodingContext.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockEncodingContext.html
index c480add..5cd5d5f 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockEncodingContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/HFileBlockEncodingContext.html
@@ -181,12 +181,18 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
                                                       byte[]&nbsp;header,
                                                       <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+                                                      byte[]&nbsp;header,
+                                                      <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
                                                       byte[]&nbsp;headerBytes,
                                                       <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>
@@ -204,18 +210,30 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>int</code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
             <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+            <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+            <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
             <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>
 <div class="block">Encodes a KeyValue.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])">endBlockEncoding</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+                                <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
+                                byte[]&nbsp;uncompressedBytesWithHeader)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])">endBlockEncoding</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
@@ -232,11 +250,16 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">startBlockEncoding</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">startBlockEncoding</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">startBlockEncoding</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
+                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">startBlockEncoding</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>
 <div class="block">Starts encoding for a block of KeyValues.</div>


[29/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 3e49610..438566d 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -397,148 +397,148 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.141">m_filter</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.141">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">m_filter__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.158">m_deadServers</a></pre>
+<h4>m_metaLocation</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.158">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">m_deadServers__IsNotDefault</a></pre>
+<h4>m_metaLocation__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.175">m_metaLocation</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.175">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">m_metaLocation__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.192">m_catalogJanitorEnabled</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.192">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">m_catalogJanitorEnabled__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.209">m_frags</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.209">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">m_frags__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.226">m_serverManager</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.226">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_frags__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">m_serverManager__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.243">m_assignmentManager</a></pre>
+<h4>m_serverManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.243">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_serverManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.260">m_servers</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.260">m_catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_catalogJanitorEnabled__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.265">m_servers__IsNotDefault</a></pre>
+<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.265">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -611,220 +611,220 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.125">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.131">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.131">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getDeadServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.137">getFilter</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<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/tmpl/master/MasterStatusTmpl.ImplData.html#line.137">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.142">getFilter__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.142">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.148">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
+<h4>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.148">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getMetaLocation()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<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/tmpl/master/MasterStatusTmpl.ImplData.html#line.154">getDeadServers</a>()</pre>
+<h4>getMetaLocation</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/tmpl/master/MasterStatusTmpl.ImplData.html#line.154">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getMetaLocation__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.159">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getMetaLocation__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.159">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.165">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.165">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getMetaLocation()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation</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/tmpl/master/MasterStatusTmpl.ImplData.html#line.171">getMetaLocation</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.171">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.176">getMetaLocation__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.176">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.182">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.182">setServers</a>(<a href="http://docs.oracle.com/javase/7/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>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled()">
+<a name="getServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.188">getCatalogJanitorEnabled</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.188">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.193">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.193">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.199">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.199">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getFrags()">
+<a name="getAssignmentManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.205">getFrags</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.205">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.210">getFrags__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.210">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.216">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
+<h4>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.216">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getServerManager()">
+<a name="getFrags()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.222">getServerManager</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.222">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault()">
+<a name="getFrags__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.227">getServerManager__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.227">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.233">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.233">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager()">
+<a name="getServerManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.239">getAssignmentManager</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.239">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getServerManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.244">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getServerManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.244">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.250">setServers</a>(<a href="http://docs.oracle.com/javase/7/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>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.250">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="getServers()">
+<a name="getCatalogJanitorEnabled()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.256">getServers</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.256">getCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getCatalogJanitorEnabled__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.261">getServers__IsNotDefault</a>()</pre>
+<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.261">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index ba62a3a..937619b 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -332,76 +332,76 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.277">format</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.284">filter</a></pre>
+<h4>deadServers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.284">deadServers</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.291">deadServers</a></pre>
+<h4>metaLocation</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.291">metaLocation</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.298">metaLocation</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.298">filter</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.305">catalogJanitorEnabled</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.305">servers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.312">frags</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.312">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.319">serverManager</a></pre>
+<h4>frags</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.319">frags</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.326">assignmentManager</a></pre>
+<h4>serverManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.326">serverManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.333">servers</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.333">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
 </li>
@@ -482,76 +482,76 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.278">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.285">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setDeadServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.285">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.292">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
+<h4>setMetaLocation</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.292">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.299">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.299">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.306">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.306">setServers</a>(<a href="http://docs.oracle.com/javase/7/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;p_servers)</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.313">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.313">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.320">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
+<h4>setFrags</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.320">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.327">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setServerManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.327">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.334">setServers</a>(<a href="http://docs.oracle.com/javase/7/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;p_servers)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.334">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index ac0ee50..0f861b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -273,76 +273,76 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">format</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">filter</a></pre>
+<h4>deadServers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">deadServers</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">deadServers</a></pre>
+<h4>metaLocation</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">metaLocation</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">metaLocation</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">filter</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">catalogJanitorEnabled</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">servers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">frags</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">serverManager</a></pre>
+<h4>frags</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">frags</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.72">assignmentManager</a></pre>
+<h4>serverManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.72">serverManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.73">servers</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.73">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 8fcc9fb..3aead79 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -279,40 +279,40 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.71">m_regionServer</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_format</a></pre>
+<h4>m_bcv</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_bcv</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcv__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_format__IsNotDefault</a></pre>
+<h4>m_bcv__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcv">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_bcv</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_bcv__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcv__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_bcn">
@@ -333,22 +333,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_filter</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_format</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_filter__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -394,58 +394,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.67">getRegionServer</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setBcv</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getBcv()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getFormat</a>()</pre>
+<h4>getBcv</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getBcv</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getBcv__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcv__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getBcv()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getBcv</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getBcv__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcv__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setBcn(java.lang.String)">
@@ -475,31 +475,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFilter</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFilter__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index 990dd14..8260720 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -283,22 +283,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="format">
+<a name="bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.151">format</a></pre>
+<h4>bcv</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.151">bcv</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.158">bcv</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.158">filter</a></pre>
 </li>
 </ul>
 <a name="bcn">
@@ -310,13 +310,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.165">bcn</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.172">filter</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.172">format</a></pre>
 </li>
 </ul>
 </li>
@@ -388,22 +388,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setBcv</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
 <a name="setBcn(java.lang.String)">
@@ -415,13 +415,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.166">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 2fe9fef..8ae5516 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -224,22 +224,22 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.28">regionServer</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.29">format</a></pre>
+<h4>bcv</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.29">bcv</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.30">bcv</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.30">filter</a></pre>
 </li>
 </ul>
 <a name="bcn">
@@ -251,13 +251,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.31">bcn</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.32">filter</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.32">format</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/util/class-use/KeyLocker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/KeyLocker.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/KeyLocker.html
index 9adbaad..0c46cce 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/KeyLocker.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/KeyLocker.html
@@ -79,6 +79,10 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.snapshot">org.apache.hadoop.hbase.master.snapshot</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -105,6 +109,42 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.master.snapshot">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><span class="strong">SnapshotManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#locks">locks</a></strong></code>
+<div class="block">Locks for snapshot operations
+  key is snapshot's filename in progress, value is the related lock
+    - create snapshot
+    - SnapshotCleaner</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a> that return <a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><span class="strong">SnapshotManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#getLocks()">getLocks</a></strong>()</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.util">
 <!--   -->
 </a>


[48/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index b9e4b5c..1f22e2a 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -4603,6 +4603,8 @@
 <dd>
 <div class="block">Searches for the latest value for the specified column.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#binarySearch(org.apache.hadoop.hbase.Cell,%20boolean)">binarySearch(Cell, boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/Bytes.html#binarySearch(byte[][],%20byte[],%20int,%20int,%20org.apache.hadoop.io.RawComparator)">binarySearch(byte[][], byte[], int, int, RawComparator&lt;?&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></dt>
 <dd>
 <div class="block"><span class="strong">Deprecated.</span>
@@ -5589,7 +5591,7 @@
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">BufferedDataBlockEncoder.SeekerState</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">BufferedDataBlockEncoder.SeekerState(ObjectIntPair&lt;ByteBuffer&gt;, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">BufferedDataBlockEncoder.SeekerState(ObjectIntPair&lt;ByteBuffer&gt;, boolean, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><span class="strong">BufferedMutator</span></a> - Interface in <a href="./org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>
@@ -8761,6 +8763,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Mutation.html#checkRow(java.nio.ByteBuffer)">checkRow(ByteBuffer)</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#checkRow(org.apache.hadoop.hbase.Cell)">checkRow(Cell)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.html#checkRow">checkRow</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.html" title="class in org.apache.hadoop.hbase.io.hfile">HFilePrettyPrinter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#checkRow(byte[],%20java.lang.String)">checkRow(byte[], String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
@@ -9096,6 +9100,8 @@
 <dd>
 <div class="block">The size of individual Bloom filter chunks to create</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#chunkCount">chunkCount</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.ReadyChunk.html#chunkId">chunkId</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.ReadyChunk.html" title="class in org.apache.hadoop.hbase.io.hfile">CompoundBloomFilterWriter.ReadyChunk</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html#chunkPool">chunkPool</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemStoreLAB</a></dt>
@@ -9242,6 +9248,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#CleanerChore(java.lang.String,%20int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.lang.String)">CleanerChore(String, int, Stoppable, Configuration, FileSystem, Path, String)</a></span> - Constructor for class org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#CleanerChore(java.lang.String,%20int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.lang.String,%20java.util.Map)">CleanerChore(String, int, Stoppable, Configuration, FileSystem, Path, String, Map&lt;String, Object&gt;)</a></span> - Constructor for class org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#cleanersChain">cleanersChain</a></span> - Variable in class org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.html#cleanExpiredMobFiles(java.lang.String,%20org.apache.hadoop.hbase.HColumnDescriptor)">cleanExpiredMobFiles(String, HColumnDescriptor)</a></span> - Method in class org.apache.hadoop.hbase.mob.<a href="./org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.html" title="class in org.apache.hadoop.hbase.mob">ExpiredMobFileCleaner</a></dt>
@@ -11925,6 +11933,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#comparator">comparator</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#comparator">comparator</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#COMPARATOR">COMPARATOR</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterBase.html#comparator">comparator</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterBase.html" title="class in org.apache.hadoop.hbase.io.hfile">CompoundBloomFilterBase</a></dt>
@@ -12209,6 +12219,8 @@
 <dd>
 <div class="block">Compare the given key against the current key</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey(CellComparator, Cell)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey(CellComparator, Cell)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey(CellComparator, Cell)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
@@ -12304,6 +12316,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/CellComparator.MetaCellComparator.html#compareRows(byte[],%20int,%20int,%20byte[],%20int,%20int)">compareRows(byte[], int, int, byte[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/CellComparator.MetaCellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator.MetaCellComparator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareRows(java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Cell)">compareRows(ByteBuffer, Cell)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/KeyValue.KVComparator.html#compareRows(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell)">compareRows(Cell, Cell)</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/KeyValue.KVComparator.html" title="class in org.apache.hadoop.hbase">KeyValue.KVComparator</a></dt>
 <dd>
 <div class="block"><span class="strong">Deprecated.</span></div>
@@ -14701,6 +14715,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#copyFromNext(org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder.SeekerState)">copyFromNext(BufferedDataBlockEncoder.SeekerState)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">FastDiffDeltaEncoder.FastDiffSeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#copyFromNext(org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState)">copyFromNext(RowIndexSeekerV1.SeekerState)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>
+<div class="block">Copy the state from the next one into this instance (the previous state placeholder).</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ByteBufferUtils.html#copyFromStreamToBuffer(java.nio.ByteBuffer,%20java.io.DataInputStream,%20int)">copyFromStreamToBuffer(ByteBuffer, DataInputStream, int)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">ByteBufferUtils</a></dt>
 <dd>
 <div class="block">Copy the given number of bytes from the given stream and put it at the
@@ -15655,8 +15673,6 @@
 <dd>
 <div class="block">Prepare the regions and region files.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#createdChunkCount">createdChunkCount</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html#createDecompressionStream(java.io.InputStream,%20org.apache.hadoop.io.compress.Decompressor,%20int)">createDecompressionStream(InputStream, Decompressor, int)</a></span> - Method in enum org.apache.hadoop.hbase.io.compress.<a href="./org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/crypto/aes/AES.html#createDecryptionStream(java.io.InputStream,%20org.apache.hadoop.hbase.io.crypto.Context,%20byte[])">createDecryptionStream(InputStream, Context, byte[])</a></span> - Method in class org.apache.hadoop.hbase.io.crypto.aes.<a href="./org/apache/hadoop/hbase/io/crypto/aes/AES.html" title="class in org.apache.hadoop.hbase.io.crypto.aes">AES</a></dt>
@@ -15886,6 +15902,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#createFirstKeyCell(java.nio.ByteBuffer,%20int)">createFirstKeyCell(ByteBuffer, int)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createFirstKeyCell(java.nio.ByteBuffer,%20int)">createFirstKeyCell(ByteBuffer, int)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/CellUtil.html#createFirstOnNextRow(org.apache.hadoop.hbase.Cell)">createFirstOnNextRow(Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>
 <div class="block">Create a Cell that is smaller than all other possible Cells for the given Cell row's next row.</div>
@@ -16612,6 +16630,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker(CellComparator, HFileBlockDecodingContext)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">PrefixKeyDeltaEncoder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker(CellComparator, HFileBlockDecodingContext)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#createSeekerState()">createSeekerState()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html#createSequential(java.lang.String,%20byte[],%20java.util.List,%20org.apache.zookeeper.CreateMode)">createSequential(String, byte[], List&lt;ACL&gt;, CreateMode)</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="./org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html" title="class in org.apache.hadoop.hbase.zookeeper">RecoverableZooKeeper</a></dt>
@@ -17123,6 +17143,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCachesIterator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="./org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dt>
@@ -17141,6 +17163,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#currentBuffer">currentBuffer</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#currentBuffer">currentBuffer</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#currentBuffer">currentBuffer</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#currentCallable">currentCallable</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFutureImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#currentCallTotalTimeout">currentCallTotalTimeout</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFutureImpl</a></dt>
@@ -17183,6 +17209,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#currentKey">currentKey</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#currentKey">currentKey</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html#currentKey">currentKey</a></span> - Variable in class org.apache.hadoop.hbase.security.token.<a href="./org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenSecretManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#currentlyWriting">currentlyWriting</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a></dt>
@@ -17779,6 +17807,8 @@
 <dd>
 <div class="block">Read an instance of the first type parameter from buffer <code>src</code>.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeAtPosition(int)">decodeAtPosition(int)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/Union2.html#decodeB(org.apache.hadoop.hbase.util.PositionedByteRange)">decodeB(PositionedByteRange)</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/Union2.html" title="class in org.apache.hadoop.hbase.types">Union2</a></dt>
 <dd>
 <div class="block">Read an instance of the second type parameter from buffer <code>src</code>.</div>
@@ -17825,6 +17855,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#decodeFirst()">decodeFirst()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeFirst()">decodeFirst()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/OrderedFloat32.html#decodeFloat(org.apache.hadoop.hbase.util.PositionedByteRange)">decodeFloat(PositionedByteRange)</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/OrderedFloat32.html" title="class in org.apache.hadoop.hbase.types">OrderedFloat32</a></dt>
 <dd>
 <div class="block">Read a <code>float</code> value from the buffer <code>dst</code>.</div>
@@ -17886,6 +17918,8 @@
 <dd>
 <div class="block">Decode.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#decodeKeyValues(java.io.DataInputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">decodeKeyValues(DataInputStream, HFileBlockDecodingContext)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/OrderedInt64.html#decodeLong(org.apache.hadoop.hbase.util.PositionedByteRange)">decodeLong(PositionedByteRange)</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/OrderedInt64.html" title="class in org.apache.hadoop.hbase.types">OrderedInt64</a></dt>
 <dd>
 <div class="block">Read a <code>long</code> value from the buffer <code>src</code>.</div>
@@ -17902,6 +17936,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#decodeNext()">decodeNext()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeNext()">decodeNext()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#decodeNumericAsBigDecimal(org.apache.hadoop.hbase.util.PositionedByteRange)">decodeNumericAsBigDecimal(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
 <dd>
 <div class="block">Decode a <a href="http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html?is-external=true" title="class or interface in java.math"><code>BigDecimal</code></a> value from the variable-length encoding.</div>
@@ -17947,6 +17983,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#decodeTags()">decodeTags()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodeTags()">decodeTags()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/Base64.html#decodeToFile(java.lang.String,%20java.lang.String)">decodeToFile(String, String)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/Base64.html" title="class in org.apache.hadoop.hbase.util">Base64</a></dt>
 <dd>
 <div class="block">Convenience method for decoding data to a file.</div>
@@ -17957,6 +17995,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#decodingCtx">decodingCtx</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#decodingCtx">decodingCtx</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#decodingCtx">decodingCtx</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/compress/Compression.html#decompress(byte[],%20int,%20java.io.InputStream,%20int,%20int,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm)">decompress(byte[], int, InputStream, int, int, Compression.Algorithm)</a></span> - Static method in class org.apache.hadoop.hbase.io.compress.<a href="./org/apache/hadoop/hbase/io/compress/Compression.html" title="class in org.apache.hadoop.hbase.io.compress">Compression</a></dt>
@@ -20428,7 +20468,7 @@
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">DiffKeyDeltaEncoder.DiffSeekerState</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">DiffKeyDeltaEncoder.DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt;, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">DiffKeyDeltaEncoder.DiffSeekerState</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">DiffKeyDeltaEncoder.DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt;, boolean, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">DiffKeyDeltaEncoder.DiffSeekerState</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html#digest">digest</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable.ResultHasher</a></dt>
 <dd>&nbsp;</dd>
@@ -20487,7 +20527,7 @@
 <dd>
 <div class="block">Take a snapshot of a disabled table.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices)">DisabledTableSnapshotHandler(HBaseProtos.SnapshotDescription, MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">DisabledTableSnapshotHandler</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">DisabledTableSnapshotHandler(HBaseProtos.SnapshotDescription, MasterServices, SnapshotManager)</a></span> - Constructor for class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">DisabledTableSnapshotHandler</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/wal/DisabledWALProvider.html" title="class in org.apache.hadoop.hbase.wal"><span class="strong">DisabledWALProvider</span></a> - Class in <a href="./org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a></dt>
 <dd>
@@ -21743,6 +21783,8 @@
 <dd>
 <div class="block">Encodes a KeyValue.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode(Cell, HFileBlockEncodingContext, DataOutputStream)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode(Cell, HFileBlockEncodingContext, DataOutputStream)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a></dt>
 <dd>
 <div class="block">Encodes a KeyValue.</div>
@@ -22136,6 +22178,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#encoder">encoder</a></span> - Variable in enum org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html#encoder">encoder</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1.RowIndexEncodingState</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/io/encoding/EncoderBufferTooSmallException.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">EncoderBufferTooSmallException</span></a> - Exception in <a href="./org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></dt>
 <dd>
 <div class="block">Internal error which indicates a bug in a data block encoding algorithm.</div>
@@ -22199,6 +22243,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/EncodedDataBlock.html#encodingCtx">encodingCtx</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/EncodedDataBlock.html" title="class in org.apache.hadoop.hbase.io.encoding">EncodedDataBlock</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#encodingCtx">encodingCtx</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/io/encoding/EncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">EncodingState</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></dt>
 <dd>
 <div class="block">Keeps track of the encoding state.</div>
@@ -22305,6 +22351,8 @@
 <dd>
 <div class="block">Ends encoding for a block of KeyValues.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])">endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[])</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[],%20org.apache.hadoop.hbase.io.hfile.BlockType)">endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[], BlockType)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a></dt>
 <dd>
 <div class="block">Ends encoding for a block of KeyValues.</div>
@@ -24350,7 +24398,7 @@
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">FastDiffDeltaEncoder.FastDiffSeekerState</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">FastDiffDeltaEncoder.FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt;, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">FastDiffDeltaEncoder.FastDiffSeekerState</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">FastDiffDeltaEncoder.FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt;, boolean, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">FastDiffDeltaEncoder.FastDiffSeekerState</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.html#fastFailClearingTimeMilliSec">fastFailClearingTimeMilliSec</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.html" title="class in org.apache.hadoop.hbase.client">PreemptiveFastFailInterceptor</a></dt>
 <dd>&nbsp;</dd>
@@ -25806,6 +25854,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/compress/ReusableStreamGzipCodec.ReusableGzipOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.hadoop.hbase.io.compress.<a href="./org/apache/hadoop/hbase/io/compress/ReusableStreamGzipCodec.ReusableGzipOutputStream.html" title="class in org.apache.hadoop.hbase.io.compress">ReusableStreamGzipCodec.ReusableGzipOutputStream</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#flush()">flush()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#flush(boolean)">flush(boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Region.html#flush(boolean)">flush(boolean)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></dt>
@@ -28661,6 +28711,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getCell()">getCell()</a></span> - Method in interface org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getCell()">getCell()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#getCell()">getCell()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#getCell()">getCell()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
@@ -28671,6 +28723,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/CellFlatMap.html#getCell(int)">getCell(int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/CellFlatMap.html" title="class in org.apache.hadoop.hbase.regionserver">CellFlatMap</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#getCellBufSize()">getCellBufSize()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#getCellBufSize()">getCellBufSize()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html#getCellCodecClsName()">getCellCodecClsName()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrContext</a></dt>
@@ -31427,6 +31481,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock(ByteBuff)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">PrefixKeyDeltaEncoder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock(ByteBuff)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.io.hfile.HFileBlock)">getFirstKeyCellInBlock(HFileBlock)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.io.hfile.HFileBlock)">getFirstKeyCellInBlock(HFileBlock)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
@@ -32358,6 +32414,8 @@
 <div class="block">From the current position creates a cell using the key part
  of the current buffer</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getKey()">getKey()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#getKey()">getKey()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#getKey()">getKey()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
@@ -33006,6 +33064,8 @@
 <div class="block">Determine based on a list of children under a ZNode, whether or not a
  process which created a specified ZNode has obtained a lock.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#getLocks()">getLocks()</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.html#getLockZNode(java.lang.String)">getLockZNode(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="./org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationQueuesZKImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/MetaUtils.html#getLog(org.apache.hadoop.hbase.HRegionInfo)">getLog(HRegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/MetaUtils.html" title="class in org.apache.hadoop.hbase.util">MetaUtils</a></dt>
@@ -37707,6 +37767,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/RowMutations.html#getRow()">getRow()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getRow(int)">getRow(int)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/rest/RowSpec.html#getRow()">getRow()</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="./org/apache/hadoop/hbase/rest/RowSpec.html" title="class in org.apache.hadoop.hbase.rest">RowSpec</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/thrift/ThriftServerRunner.HBaseHandler.html#getRow(java.nio.ByteBuffer,%20java.nio.ByteBuffer,%20java.util.Map)">getRow(ByteBuffer, ByteBuffer, Map&lt;ByteBuffer, ByteBuffer&gt;)</a></span> - Method in class org.apache.hadoop.hbase.thrift.<a href="./org/apache/hadoop/hbase/thrift/ThriftServerRunner.HBaseHandler.html" title="class in org.apache.hadoop.hbase.thrift">ThriftServerRunner.HBaseHandler</a></dt>
@@ -39098,7 +39160,7 @@
 <dd>
 <div class="block">Returns the map of store files based on path for all snapshots</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getSnapshotsInProgress()">getSnapshotsInProgress()</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getSnapshotsInProgress(org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">getSnapshotsInProgress(SnapshotManager)</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#getSnapshotSize()">getSnapshotSize()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/AbstractMemStore.html" title="class in org.apache.hadoop.hbase.regionserver">AbstractMemStore</a></dt>
 <dd>&nbsp;</dd>
@@ -41430,7 +41492,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html#getUnneededFiles(long,%20java.util.List)">getUnneededFiles(long, List&lt;StoreFile&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFileManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getUnreferencedFiles(java.lang.Iterable)">getUnreferencedFiles(Iterable&lt;FileStatus&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getUnreferencedFiles(java.lang.Iterable,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">getUnreferencedFiles(Iterable&lt;FileStatus&gt;, SnapshotManager)</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a></dt>
 <dd>
 <div class="block">Check to see if any of the passed file names is contained in any of the snapshots.</div>
 </dd>
@@ -41830,6 +41892,8 @@
 <dd>
 <div class="block">Does a shallow copy of the value at the current position.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getValueShallowCopy()">getValueShallowCopy()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#getValueString()">getValueString()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#getValueString()">getValueString()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
@@ -44617,6 +44681,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#HeapMemoryManager(org.apache.hadoop.hbase.io.hfile.ResizableBlockCache,%20org.apache.hadoop.hbase.regionserver.FlushRequester,%20org.apache.hadoop.hbase.Server,%20org.apache.hadoop.hbase.regionserver.RegionServerAccounting)">HeapMemoryManager(ResizableBlockCache, FlushRequester, Server, RegionServerAccounting)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">HeapMemoryManager.HeapMemoryTuneObserver</span></a> - Interface in <a href="./org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
+<dd>
+<div class="block">Every class that wants to observe heap memory tune actions must implement this interface.</div>
+</dd>
 <dt><a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">HeapMemoryManager.HeapMemoryTunerChore</span></a> - Class in <a href="./org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#HeapMemoryManager.HeapMemoryTunerChore()">HeapMemoryManager.HeapMemoryTunerChore()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a></dt>
@@ -45087,6 +45155,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#HFileCleaner(int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path)">HFileCleaner(int, Stoppable, Configuration, FileSystem, Path)</a></span> - Constructor for class org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#HFileCleaner(int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.util.Map)">HFileCleaner(int, Stoppable, Configuration, FileSystem, Path, Map&lt;String, Object&gt;)</a></span> - Constructor for class org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/HMaster.html#hfileCleaner">hfileCleaner</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFileContext</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/hfile/package-summary.html">org.apache.hadoop.hbase.io.hfile</a></dt>
@@ -46622,6 +46692,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#includesMvcc()">includesMvcc()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#includesMvcc()">includesMvcc()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileContext.html#includesMvcc">includesMvcc</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a></dt>
 <dd>
 <div class="block">Whether mvcc is to be included in the Read/Write</div>
@@ -46634,6 +46706,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#includesTags()">includesTags()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#includesTags()">includesTags()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileContext.html#includesTags">includesTags</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a></dt>
 <dd>
 <div class="block">Whether tags are to be included in the Read/Write</div>
@@ -47510,6 +47584,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.RegionReplicaRackCostFunction.html#init(org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster)">init(BaseLoadBalancer.Cluster)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.RegionReplicaRackCostFunction.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer.RegionReplicaRackCostFunction</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init(Map&lt;String, Object&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#init(java.util.Map)">init(Map&lt;String, Object&gt;)</a></span> - Method in interface org.apache.hadoop.hbase.master.cleaner.<a href="./org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner">FileCleanerDelegate</a></dt>
+<dd>
+<div class="block">this method is used to pass some instance into subclass</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.html#init()">init()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsAssignmentManagerSourceImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/MetricsMasterFilesystemSourceImpl.html#init()">init()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/MetricsMasterFilesystemSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterFilesystemSourceImpl</a></dt>
@@ -47520,6 +47600,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/MetricsSnapshotSourceImpl.html#init()">init()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/MetricsSnapshotSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsSnapshotSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#init(java.util.Map)">init(Map&lt;String, Object&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotHFileCleaner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/metrics/BaseSource.html#init()">init()</a></span> - Method in interface org.apache.hadoop.hbase.metrics.<a href="./org/apache/hadoop/hbase/metrics/BaseSource.html" title="interface in org.apache.hadoop.hbase.metrics">BaseSource</a></dt>
 <dd>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
@@ -48726,6 +48808,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#invalidate()">invalidate()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#invalidate()">invalidate()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/InvalidFamilyOperationException.html" title="class in org.apache.hadoop.hbase"><span class="strong">InvalidFamilyOperationException</span></a> - Exception in <a href="./org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
 <dd>
 <div class="block">Thrown if a request is table schema modification is requested but
@@ -51426,6 +51510,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#isValid()">isValid()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#isValid()">isValid()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/RootProcedureState.html#isValid()">isValid()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a></dt>
 <dd>
 <div class="block">Called on store load by the ProcedureExecutor to validate the procedure stack.</div>
@@ -52006,6 +52092,11 @@
 <dd>
 <div class="block">Configuration key to set how long to wait in ms doing a quick check on meta state.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#KEY_VALUE_LEN_SIZE">KEY_VALUE_LEN_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>
+<div class="block">The size of a (key length, value length) tuple that prefixes each entry
+ in a data block.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html#KEY_VALUE_LEN_SIZE">KEY_VALUE_LEN_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl</a></dt>
 <dd>
 <div class="block">The size of a (key length, value length) tuple that prefixes each entry in
@@ -52029,6 +52120,8 @@
 <dd>
 <div class="block">We need to store a copy of the key.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#keyBuffer">keyBuffer</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.ArrayHolder.html#keyComparator">keyComparator</a></span> - Variable in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.ArrayHolder.html" title="class in org.apache.hadoop.hbase.types">CopyOnWriteArrayMap.ArrayHolder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.html#keyComparator">keyComparator</a></span> - Variable in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.html" title="class in org.apache.hadoop.hbase.types">CopyOnWriteArrayMap</a></dt>
@@ -52051,6 +52144,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/CompressionState.html#keyLength">keyLength</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/CompressionState.html" title="class in org.apache.hadoop.hbase.io.encoding">CompressionState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#keyLength">keyLength</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/KeyValueUtil.html#keyLength(org.apache.hadoop.hbase.Cell)">keyLength(Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/KeyValueUtil.html" title="class in org.apache.hadoop.hbase">KeyValueUtil</a></dt>
 <dd>
 <div class="block">Returns number of bytes this cell's key part would have been used if serialized as in
@@ -52586,6 +52681,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/ByteBufferListOutputStream.html#lastBufFlipped">lastBufFlipped</a></span> - Variable in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/ByteBufferListOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteBufferListOutputStream</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#lastCell">lastCell</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></dt>
+<dd>
+<div class="block">The Cell previously appended.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.html#lastCell">lastCell</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileWriterImpl</a></dt>
 <dd>
 <div class="block">The Cell previously appended.</div>
@@ -54051,6 +54150,13 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/KeyLocker.html#lockPool">lockPool</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#locks">locks</a></span> - Variable in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></dt>
+<dd>
+<div class="block">Locks for snapshot operations
+  key is snapshot's filename in progress, value is the related lock
+    - create snapshot
+    - SnapshotCleaner</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/quotas/MasterQuotaManager.NamedLock.html#locks">locks</a></span> - Variable in class org.apache.hadoop.hbase.quotas.<a href="./org/apache/hadoop/hbase/quotas/MasterQuotaManager.NamedLock.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager.NamedLock</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/exceptions/LockTimeoutException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">LockTimeoutException</span></a> - Exception in <a href="./org/apache/hadoop/hbase/exceptions/package-summary.html">org.apache.hadoop.hbase.exceptions</a></dt>
@@ -54241,6 +54347,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/crypto/Encryption.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.crypto.<a href="./org/apache/hadoop/hbase/io/crypto/Encryption.html" title="class in org.apache.hadoop.hbase.io.crypto">Encryption</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/FileLink.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/FileLink.html" title="class in org.apache.hadoop.hbase.io">FileLink</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/HalfStoreFileReader.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/HalfStoreFileReader.html" title="class in org.apache.hadoop.hbase.io">HalfStoreFileReader</a></dt>
@@ -56698,6 +56806,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/ServerManager.html#master">master</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#master">master</a></span> - Variable in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotHFileCleaner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#master">master</a></span> - Variable in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#master">master</a></span> - Variable in class org.apache.hadoop.hbase.master.snapshot.<a href="./org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a></dt>
@@ -58028,9 +58138,9 @@
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreChunkPool</span></a> - Class in <a href="./org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>
-<div class="block">A pool of <code>HeapMemStoreLAB.Chunk</code> instances.</div>
+<div class="block">A pool of <a href="./org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#MemStoreChunkPool(org.apache.hadoop.conf.Configuration,%20int,%20int,%20int)">MemStoreChunkPool(Configuration, int, int, int)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#MemStoreChunkPool(org.apache.hadoop.conf.Configuration,%20int,%20int,%20int,%20float)">MemStoreChunkPool(Configuration, int, int, int, float)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreChunkPool.PooledChunk</span></a> - Class in <a href="./org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>&nbsp;</dd>
@@ -58149,6 +58259,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#memstoreTS">memstoreTS</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#memstoreTS">memstoreTS</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mob/mapreduce/SweepReducer.SweepPartition.html#memstoreUpdated">memstoreUpdated</a></span> - Variable in class org.apache.hadoop.hbase.mob.mapreduce.<a href="./org/apache/hadoop/hbase/mob/mapreduce/SweepReducer.SweepPartition.html" title="class in org.apache.hadoop.hbase.mob.mapreduce">SweepReducer.SweepPartition</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/mob/mapreduce/MemStoreWrapper.html" title="class in org.apache.hadoop.hbase.mob.mapreduce"><span class="strong">MemStoreWrapper</span></a> - Class in <a href="./org/apache/hadoop/hbase/mob/mapreduce/package-summary.html">org.apache.hadoop.hbase.mob.mapreduce</a></dt>
@@ -60415,6 +60527,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#moveToPrevious()">moveToPrevious()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#moveToPrevious()">moveToPrevious()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/HMaster.html#mpmHost">mpmHost</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#MR_NUM_MAPS">MR_NUM_MAPS</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="./org/apache/hadoop/hbase/snapshot/ExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">ExportSnapshot</a></dt>
@@ -61489,6 +61603,8 @@
 <div class="block">Creates an encoder specific decoding context, which will prepare the data
  before actual decoding</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext(HFileContext)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext(HFileContext)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a></dt>
 <dd>
 <div class="block">create a encoder specific decoding context for reading.</div>
@@ -61505,6 +61621,8 @@
 <dd>
 <div class="block">Creates a encoder specific encoding context</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext(DataBlockEncoding, byte[], HFileContext)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html#newDataBlockEncodingContext(byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext(byte[], HFileContext)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a></dt>
 <dd>
 <div class="block">Create an encoder specific encoding context object for writing.</div>
@@ -61692,6 +61810,8 @@
 <dd>
 <div class="block">Move to next position</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#next()">next()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html#next()">next()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCachesIterator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#next()">next()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
@@ -61905,6 +62025,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#nextKvOffset">nextKvOffset</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#nextKvOffset">nextKvOffset</a></span> - Variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/tokenize/Tokenizer.html#nextNodeId()">nextNodeId()</a></span> - Method in class org.apache.hadoop.hbase.codec.prefixtree.encode.tokenize.<a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/tokenize/Tokenizer.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.encode.tokenize">Tokenizer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html#nextNodeOffsetsOffset">nextNodeOffsetsOffset</a></span> - Variable in class org.apache.hadoop.hbase.codec.prefixtree.decode.row.<a href="./org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.decode.row">RowNodeReader</a></dt>
@@ -63351,6 +63473,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/BufferedMutator.ExceptionListener.html#onException(org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException,%20org.apache.hadoop.hbase.client.BufferedMutator)">onException(RetriesExhaustedWithDetailsException, BufferedMutator)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/BufferedMutator.ExceptionListener.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator.ExceptionListener</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html#onHeapMemoryTune(long,%20long)">onHeapMemoryTune(long, long)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></dt>
+<dd>
+<div class="block">This method would be called by HeapMemoryManger when a heap memory tune action took place.</div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#onHeapMemoryTune(long,%20long)">onHeapMemoryTune(long, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.html#online">online</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/snapshot/SnapshotMa

<TRUNCATED>

[49/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 061ac42..8f4b195 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -331,7 +331,7 @@ For flagrant violations requiring a firm response the PMC may opt to skip early
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index ce77f68..9ed5816 100644
--- a/cygwin.html
+++ b/cygwin.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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -673,7 +673,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index f96c56d..b908900 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -518,7 +518,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index b78d687..a209e8c 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1727,7 +1727,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index f4e50a0..11fedd3 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -312,7 +312,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 32979b5..fc52871 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -816,7 +816,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index eb8eb87..d70a705 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -828,6 +828,7 @@
 <li><a href="org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase" target="classFrame">HealthChecker.HealthCheckerExitStatus</a></li>
 <li><a href="org/apache/hadoop/hbase/HealthReport.html" title="class in org.apache.hadoop.hbase" target="classFrame">HealthReport</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">HeapMemoryManager</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>HeapMemoryManager.HeapMemoryTuneObserver</i></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">HeapMemoryManager.TunerContext</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">HeapMemoryManager.TunerResult</a></li>
 <li><a href="org/apache/hadoop/hbase/io/util/HeapMemorySizeUtil.html" title="class in org.apache.hadoop.hbase.io.util" target="classFrame">HeapMemorySizeUtil</a></li>
@@ -1866,6 +1867,10 @@
 <li><a href="org/apache/hadoop/hbase/mapred/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapred" target="classFrame">RowCounter.RowCounterMapper.Counters</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce" target="classFrame">RowCounter.RowCounterMapper.Counters</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/RowFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">RowFilter</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexCodecV1</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexCodecV1.RowIndexEncodingState</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexEncoderV1</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexSeekerV1</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/RowModel.html" title="class in org.apache.hadoop.hbase.rest.model" target="classFrame">RowModel</a></li>
 <li><a href="org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">RowMutations</a></li>
 <li><a href="org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.decode.row" target="classFrame">RowNodeReader</a></li>
@@ -2348,7 +2353,7 @@
 <li><a href="org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TwoPhaseProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/util/vint/UFIntTool.html" title="class in org.apache.hadoop.hbase.util.vint" target="classFrame">UFIntTool</a></li>
 <li><a href="org/apache/hadoop/hbase/master/UnAssignCallable.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">UnAssignCallable</a></li>
-<li><a href="org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">UnexpectedStateException</a></li>
+<li><a href="org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">UnexpectedStateException</a></li>
 <li><a href="org/apache/hadoop/hbase/types/Union2.html" title="class in org.apache.hadoop.hbase.types" target="classFrame">Union2</a></li>
 <li><a href="org/apache/hadoop/hbase/types/Union3.html" title="class in org.apache.hadoop.hbase.types" target="classFrame">Union3</a></li>
 <li><a href="org/apache/hadoop/hbase/types/Union4.html" title="class in org.apache.hadoop.hbase.types" target="classFrame">Union4</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index b1840d4..102e822 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -828,6 +828,7 @@
 <li><a href="org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase">HealthChecker.HealthCheckerExitStatus</a></li>
 <li><a href="org/apache/hadoop/hbase/HealthReport.html" title="class in org.apache.hadoop.hbase">HealthReport</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><i>HeapMemoryManager.HeapMemoryTuneObserver</i></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerContext</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerResult</a></li>
 <li><a href="org/apache/hadoop/hbase/io/util/HeapMemorySizeUtil.html" title="class in org.apache.hadoop.hbase.io.util">HeapMemorySizeUtil</a></li>
@@ -1866,6 +1867,10 @@
 <li><a href="org/apache/hadoop/hbase/mapred/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapred">RowCounter.RowCounterMapper.Counters</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce">RowCounter.RowCounterMapper.Counters</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/RowFilter.html" title="class in org.apache.hadoop.hbase.filter">RowFilter</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1.RowIndexEncodingState</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></li>
+<li><a href="org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/RowModel.html" title="class in org.apache.hadoop.hbase.rest.model">RowModel</a></li>
 <li><a href="org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a></li>
 <li><a href="org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.decode.row">RowNodeReader</a></li>
@@ -2348,7 +2353,7 @@
 <li><a href="org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TwoPhaseProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/util/vint/UFIntTool.html" title="class in org.apache.hadoop.hbase.util.vint">UFIntTool</a></li>
 <li><a href="org/apache/hadoop/hbase/master/UnAssignCallable.html" title="class in org.apache.hadoop.hbase.master">UnAssignCallable</a></li>
-<li><a href="org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></li>
+<li><a href="org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></li>
 <li><a href="org/apache/hadoop/hbase/types/Union2.html" title="class in org.apache.hadoop.hbase.types">Union2</a></li>
 <li><a href="org/apache/hadoop/hbase/types/Union3.html" title="class in org.apache.hadoop.hbase.types">Union3</a></li>
 <li><a href="org/apache/hadoop/hbase/types/Union4.html" title="class in org.apache.hadoop.hbase.types">Union4</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index a5f3ceb..86d0547 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -5394,6 +5394,25 @@
 </tbody>
 </table>
 </li>
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.exceptions.<a href="org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.exceptions.UnexpectedStateException.serialVersionUID">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#serialVersionUID">serialVersionUID</a></code></td>
+<td class="colLast"><code>-6727953144066746071L</code></td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 <ul class="blockList">
 <li class="blockList">
@@ -6753,6 +6772,25 @@
 </tbody>
 </table>
 </li>
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.io.encoding.org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState.KEY_VALUE_LEN_SIZE">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#KEY_VALUE_LEN_SIZE">KEY_VALUE_LEN_SIZE</a></code></td>
+<td class="colLast"><code>8</code></td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 <ul class="blockList">
 <li class="blockList">
@@ -17515,25 +17553,6 @@
 </li>
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.UnexpectedStateException.serialVersionUID">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
-<td><code><a href="org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#serialVersionUID">serialVersionUID</a></code></td>
-<td class="colLast"><code>-6727953144066746071L</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/WrongRegionException.html" title="class in org.apache.hadoop.hbase.regionserver">WrongRegionException</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>


[05/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
index 12c4ec2..03ef67d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
@@ -31,314 +31,320 @@
 <span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.util.concurrent.CancellationException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.Log;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.logging.LogFactory;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.conf.Configuration;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.FileSystem;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.fs.Path;<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.HRegionInfo;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.ServerName;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.errorhandling.ForeignException;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.errorhandling.ForeignExceptionSnare;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.executor.EventHandler;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.executor.EventType;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.MetricsSnapshot;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.SnapshotSentinel;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.TableLockManager;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.TableLockManager.TableLock;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.snapshot.SnapshotManifest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.zookeeper.KeeperException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * A handler for taking snapshots from the master.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> *<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * This is not a subclass of TableEventHandler because using that would incur an extra hbase:meta scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> *<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * The {@link #snapshotRegions(List)} call should get implemented for each snapshot flavor.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@InterfaceAudience.Private<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public abstract class TakeSnapshotHandler extends EventHandler implements SnapshotSentinel,<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ForeignExceptionSnare {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Log LOG = LogFactory.getLog(TakeSnapshotHandler.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private volatile boolean finished;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  // none of these should ever be null<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected final MasterServices master;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  protected final MetricsSnapshot metricsSnapshot = new MetricsSnapshot();<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  protected final SnapshotDescription snapshot;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected final Configuration conf;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  protected final FileSystem fs;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  protected final Path rootDir;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final Path snapshotDir;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected final Path workingDir;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final MasterSnapshotVerifier verifier;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected final ForeignExceptionDispatcher monitor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected final TableLockManager tableLockManager;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  protected final TableLock tableLock;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected final MonitoredTask status;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  protected final TableName snapshotTable;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  protected final SnapshotManifest snapshotManifest;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected HTableDescriptor htd;<a name="line.91"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.conf.Configuration;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.fs.FileSystem;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.Path;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.36"></a>
+<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.MetaTableAccessor;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.errorhandling.ForeignException;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.errorhandling.ForeignExceptionSnare;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.executor.EventHandler;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.executor.EventType;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.MetricsSnapshot;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.SnapshotSentinel;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.TableLockManager;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.TableLockManager.TableLock;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.snapshot.SnapshotManifest;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.zookeeper.KeeperException;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>/**<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * A handler for taking snapshots from the master.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * This is not a subclass of TableEventHandler because using that would incur an extra hbase:meta scan.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> *<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * The {@link #snapshotRegions(List)} call should get implemented for each snapshot flavor.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
+<span class="sourceLineNo">069</span>public abstract class TakeSnapshotHandler extends EventHandler implements SnapshotSentinel,<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    ForeignExceptionSnare {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Log LOG = LogFactory.getLog(TakeSnapshotHandler.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private volatile boolean finished;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // none of these should ever be null<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  protected final MasterServices master;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected final MetricsSnapshot metricsSnapshot = new MetricsSnapshot();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  protected final SnapshotDescription snapshot;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected final Configuration conf;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected final FileSystem fs;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  protected final Path rootDir;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final Path snapshotDir;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected final Path workingDir;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final MasterSnapshotVerifier verifier;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected final ForeignExceptionDispatcher monitor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected final TableLockManager tableLockManager;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected final TableLock tableLock;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected final MonitoredTask status;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected final TableName snapshotTable;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected final SnapshotManifest snapshotManifest;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected final SnapshotManager snapshotManager;<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param snapshot descriptor of the snapshot to take<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param masterServices master services provider<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public TakeSnapshotHandler(SnapshotDescription snapshot, final MasterServices masterServices) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    super(masterServices, EventType.C_M_SNAPSHOT_TABLE);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    assert snapshot != null : "SnapshotDescription must not be nul1";<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    assert masterServices != null : "MasterServices must not be nul1";<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    this.master = masterServices;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this.snapshot = snapshot;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.snapshotTable = TableName.valueOf(snapshot.getTable());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.conf = this.master.getConfiguration();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this.fs = this.master.getMasterFileSystem().getFileSystem();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.rootDir = this.master.getMasterFileSystem().getRootDir();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshot, rootDir);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    this.monitor = new ForeignExceptionDispatcher(snapshot.getName());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    this.snapshotManifest = SnapshotManifest.create(conf, fs, workingDir, snapshot, monitor);<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.tableLockManager = master.getTableLockManager();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.tableLock = this.tableLockManager.writeLock(<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        snapshotTable,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        EventType.C_M_SNAPSHOT_TABLE.toString());<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    // prepare the verify<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    this.verifier = new MasterSnapshotVerifier(masterServices, snapshot, rootDir);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // update the running tasks<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    this.status = TaskMonitor.get().createStatus(<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      "Taking " + snapshot.getType() + " snapshot on table: " + snapshotTable);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private HTableDescriptor loadTableDescriptor()<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      throws FileNotFoundException, IOException {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    HTableDescriptor htd =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      this.master.getTableDescriptors().get(snapshotTable);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if (htd == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      throw new IOException("HTableDescriptor missing for " + snapshotTable);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return htd;<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 TakeSnapshotHandler prepare() throws Exception {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    super.prepare();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    this.tableLock.acquire(); // after this, you should ensure to release this lock in<a name="line.137"></a>
-<span class="sourceLineNo">138</span>                              // case of exceptions<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    boolean success = false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    try {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.htd = loadTableDescriptor(); // check that .tableinfo is present<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      success = true;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    } finally {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      if (!success) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        releaseTableLock();<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><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    return this;<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>  /**<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * Execute the core common portions of taking a snapshot. The {@link #snapshotRegions(List)}<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * call should get implemented for each snapshot flavor.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="REC_CATCH_EXCEPTION",<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    justification="Intentional")<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public void process() {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    String msg = "Running " + snapshot.getType() + " table snapshot " + snapshot.getName() + " "<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        + eventType + " on table " + snapshotTable;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    LOG.info(msg);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    status.setStatus(msg);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // If regions move after this meta scan, the region specific snapshot should fail, triggering<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // an external exception that gets captured here.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      SnapshotDescriptionUtils.createInProgressTag(workingDir, fs);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      // write down the snapshot info in the working directory<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshot, workingDir, fs);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      snapshotManifest.addTableDescriptor(this.htd);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      monitor.rethrowException();<a name="line.171"></a>
+<span class="sourceLineNo">093</span>  protected HTableDescriptor htd;<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param snapshot descriptor of the snapshot to take<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param masterServices master services provider<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public TakeSnapshotHandler(SnapshotDescription snapshot, final MasterServices masterServices,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>                             final SnapshotManager snapshotManager) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    super(masterServices, EventType.C_M_SNAPSHOT_TABLE);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    assert snapshot != null : "SnapshotDescription must not be nul1";<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    assert masterServices != null : "MasterServices must not be nul1";<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    this.master = masterServices;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.snapshot = snapshot;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.snapshotManager = snapshotManager;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.snapshotTable = TableName.valueOf(snapshot.getTable());<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    this.conf = this.master.getConfiguration();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.fs = this.master.getMasterFileSystem().getFileSystem();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.rootDir = this.master.getMasterFileSystem().getRootDir();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshot, rootDir);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.monitor = new ForeignExceptionDispatcher(snapshot.getName());<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.snapshotManifest = SnapshotManifest.create(conf, fs, workingDir, snapshot, monitor);<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    this.tableLockManager = master.getTableLockManager();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this.tableLock = this.tableLockManager.writeLock(<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        snapshotTable,<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        EventType.C_M_SNAPSHOT_TABLE.toString());<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // prepare the verify<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    this.verifier = new MasterSnapshotVerifier(masterServices, snapshot, rootDir);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // update the running tasks<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    this.status = TaskMonitor.get().createStatus(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      "Taking " + snapshot.getType() + " snapshot on table: " + snapshotTable);<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>  private HTableDescriptor loadTableDescriptor()<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      throws FileNotFoundException, IOException {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    HTableDescriptor htd =<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      this.master.getTableDescriptors().get(snapshotTable);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    if (htd == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      throw new IOException("HTableDescriptor missing for " + snapshotTable);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return htd;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public TakeSnapshotHandler prepare() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    super.prepare();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    this.tableLock.acquire(); // after this, you should ensure to release this lock in<a name="line.141"></a>
+<span class="sourceLineNo">142</span>                              // case of exceptions<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    boolean success = false;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      this.htd = loadTableDescriptor(); // check that .tableinfo is present<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      success = true;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } finally {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      if (!success) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        releaseTableLock();<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><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    return this;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Execute the core common portions of taking a snapshot. The {@link #snapshotRegions(List)}<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * call should get implemented for each snapshot flavor.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="REC_CATCH_EXCEPTION",<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    justification="Intentional")<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void process() {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    String msg = "Running " + snapshot.getType() + " table snapshot " + snapshot.getName() + " "<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        + eventType + " on table " + snapshotTable;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    LOG.info(msg);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    ReentrantLock lock = snapshotManager.getLocks().acquireLock(snapshot.getName());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    status.setStatus(msg);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    try {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      // If regions move after this meta scan, the region specific snapshot should fail, triggering<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      // an external exception that gets captured here.<a name="line.171"></a>
 <span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>      List&lt;Pair&lt;HRegionInfo, ServerName&gt;&gt; regionsAndLocations;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      if (TableName.META_TABLE_NAME.equals(snapshotTable)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        regionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations(<a name="line.175"></a>
-<span class="sourceLineNo">176</span>          server.getZooKeeper());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      } else {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        regionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations(<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          server.getConnection(), snapshotTable, false);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // run the snapshot<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      snapshotRegions(regionsAndLocations);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      monitor.rethrowException();<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // extract each pair to separate lists<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      Set&lt;String&gt; serverNames = new HashSet&lt;String&gt;();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      for (Pair&lt;HRegionInfo, ServerName&gt; p : regionsAndLocations) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        if (p != null &amp;&amp; p.getFirst() != null &amp;&amp; p.getSecond() != null) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          HRegionInfo hri = p.getFirst();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          if (hri.isOffline() &amp;&amp; (hri.isSplit() || hri.isSplitParent())) continue;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          serverNames.add(p.getSecond().toString());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      // flush the in-memory state, and write the single manifest<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      status.setStatus("Consolidate snapshot: " + snapshot.getName());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      snapshotManifest.consolidate();<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>      // verify the snapshot is valid<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      status.setStatus("Verifying snapshot: " + snapshot.getName());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      verifier.verifySnapshot(this.workingDir, serverNames);<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // complete the snapshot, atomically moving from tmp to .snapshot dir.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      completeSnapshot(this.snapshotDir, this.workingDir, this.fs);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      msg = "Snapshot " + snapshot.getName() + " of table " + snapshotTable + " completed";<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      status.markComplete(msg);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      LOG.info(msg);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      metricsSnapshot.addSnapshot(status.getCompletionTimestamp() - status.getStartTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } catch (Exception e) { // FindBugs: REC_CATCH_EXCEPTION<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      status.abort("Failed to complete snapshot " + snapshot.getName() + " on table " +<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          snapshotTable + " because " + e.getMessage());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      String reason = "Failed taking snapshot " + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          + " due to exception:" + e.getMessage();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      LOG.error(reason, e);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      ForeignException ee = new ForeignException(reason, e);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      monitor.receive(ee);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // need to mark this completed to close off and allow cleanup to happen.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      cancel(reason);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    } finally {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      LOG.debug("Launching cleanup of working dir:" + workingDir);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      try {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // if the working dir is still present, the snapshot has failed.  it is present we delete<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        // it.<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        if (fs.exists(workingDir) &amp;&amp; !this.fs.delete(workingDir, true)) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          LOG.error("Couldn't delete snapshot working directory:" + workingDir);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        LOG.error("Couldn't delete snapshot working directory:" + workingDir);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      releaseTableLock();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  protected void releaseTableLock() {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    if (this.tableLock != null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      try {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        this.tableLock.release();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      } catch (IOException ex) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        LOG.warn("Could not release the table lock", ex);<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><a name="line.244"></a>
-<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * Reset the manager to allow another snapshot to proceed<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   *<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @param snapshotDir final path of the snapshot<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * @param workingDir directory where the in progress snapshot was built<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @param fs {@link FileSystem} where the snapshot was built<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @throws SnapshotCreationException if the snapshot could not be moved<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @throws IOException the filesystem could not be reached<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public void completeSnapshot(Path snapshotDir, Path workingDir, FileSystem fs)<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      throws SnapshotCreationException, IOException {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    LOG.debug("Sentinel is done, just moving the snapshot from " + workingDir + " to "<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        + snapshotDir);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (!fs.rename(workingDir, snapshotDir)) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      throw new SnapshotCreationException("Failed to move working directory(" + workingDir<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          + ") to completed directory(" + snapshotDir + ").");<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    finished = true;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * Snapshot the specified regions<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  protected abstract void snapshotRegions(List&lt;Pair&lt;HRegionInfo, ServerName&gt;&gt; regions)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      throws IOException, KeeperException;<a name="line.269"></a>
+<span class="sourceLineNo">173</span>      // write down the snapshot info in the working directory<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshot, workingDir, fs);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      snapshotManifest.addTableDescriptor(this.htd);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      monitor.rethrowException();<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>      List&lt;Pair&lt;HRegionInfo, ServerName&gt;&gt; regionsAndLocations;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      if (TableName.META_TABLE_NAME.equals(snapshotTable)) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        regionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations(<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          server.getZooKeeper());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      } else {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        regionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations(<a name="line.183"></a>
+<span class="sourceLineNo">184</span>          server.getConnection(), snapshotTable, false);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // run the snapshot<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      snapshotRegions(regionsAndLocations);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      monitor.rethrowException();<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>      // extract each pair to separate lists<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      Set&lt;String&gt; serverNames = new HashSet&lt;String&gt;();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (Pair&lt;HRegionInfo, ServerName&gt; p : regionsAndLocations) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        if (p != null &amp;&amp; p.getFirst() != null &amp;&amp; p.getSecond() != null) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          HRegionInfo hri = p.getFirst();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          if (hri.isOffline() &amp;&amp; (hri.isSplit() || hri.isSplitParent())) continue;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          serverNames.add(p.getSecond().toString());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      // flush the in-memory state, and write the single manifest<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      status.setStatus("Consolidate snapshot: " + snapshot.getName());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      snapshotManifest.consolidate();<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // verify the snapshot is valid<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      status.setStatus("Verifying snapshot: " + snapshot.getName());<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      verifier.verifySnapshot(this.workingDir, serverNames);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>      // complete the snapshot, atomically moving from tmp to .snapshot dir.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      completeSnapshot(this.snapshotDir, this.workingDir, this.fs);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      msg = "Snapshot " + snapshot.getName() + " of table " + snapshotTable + " completed";<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      status.markComplete(msg);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      LOG.info(msg);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      metricsSnapshot.addSnapshot(status.getCompletionTimestamp() - status.getStartTime());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    } catch (Exception e) { // FindBugs: REC_CATCH_EXCEPTION<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      status.abort("Failed to complete snapshot " + snapshot.getName() + " on table " +<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          snapshotTable + " because " + e.getMessage());<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      String reason = "Failed taking snapshot " + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          + " due to exception:" + e.getMessage();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      LOG.error(reason, e);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      ForeignException ee = new ForeignException(reason, e);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      monitor.receive(ee);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // need to mark this completed to close off and allow cleanup to happen.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      cancel(reason);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    } finally {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      LOG.debug("Launching cleanup of working dir:" + workingDir);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      try {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        // if the working dir is still present, the snapshot has failed.  it is present we delete<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        // it.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (fs.exists(workingDir) &amp;&amp; !this.fs.delete(workingDir, true)) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          LOG.error("Couldn't delete snapshot working directory:" + workingDir);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (IOException e) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.error("Couldn't delete snapshot working directory:" + workingDir);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      lock.unlock();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      releaseTableLock();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  protected void releaseTableLock() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (this.tableLock != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      try {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        this.tableLock.release();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      } catch (IOException ex) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        LOG.warn("Could not release the table lock", ex);<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>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * Reset the manager to allow another snapshot to proceed<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   *<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @param snapshotDir final path of the snapshot<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * @param workingDir directory where the in progress snapshot was built<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * @param fs {@link FileSystem} where the snapshot was built<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * @throws SnapshotCreationException if the snapshot could not be moved<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * @throws IOException the filesystem could not be reached<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public void completeSnapshot(Path snapshotDir, Path workingDir, FileSystem fs)<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      throws SnapshotCreationException, IOException {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    LOG.debug("Sentinel is done, just moving the snapshot from " + workingDir + " to "<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        + snapshotDir);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.rename(workingDir, snapshotDir)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new SnapshotCreationException("Failed to move working directory(" + workingDir<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          + ") to completed directory(" + snapshotDir + ").");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    finished = true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
 <span class="sourceLineNo">270</span><a name="line.270"></a>
 <span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Take a snapshot of the specified disabled region<a name="line.272"></a>
+<span class="sourceLineNo">272</span>   * Snapshot the specified regions<a name="line.272"></a>
 <span class="sourceLineNo">273</span>   */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  protected void snapshotDisabledRegion(final HRegionInfo regionInfo)<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      throws IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    snapshotManifest.addRegion(FSUtils.getTableDir(rootDir, snapshotTable), regionInfo);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    monitor.rethrowException();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    status.setStatus("Completed referencing HFiles for offline region " + regionInfo.toString() +<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        " of table: " + snapshotTable);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public void cancel(String why) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (finished) return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>    this.finished = true;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    LOG.info("Stop taking snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) +<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        " because: " + why);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    CancellationException ce = new CancellationException(why);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    monitor.receive(new ForeignException(master.getServerName().toString(), ce));<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public boolean isFinished() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return finished;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  @Override<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public long getCompletionTimestamp() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.status.getCompletionTimestamp();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  @Override<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public SnapshotDescription getSnapshot() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return snapshot;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  @Override<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  public ForeignException getExceptionIfFailed() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return monitor.getException();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public void rethrowExceptionIfFailed() throws ForeignException {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    monitor.rethrowException();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  public void rethrowException() throws ForeignException {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    monitor.rethrowException();<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>  @Override<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public boolean hasException() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return monitor.hasException();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  public ForeignException getException() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return monitor.getException();<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">274</span>  protected abstract void snapshotRegions(List&lt;Pair&lt;HRegionInfo, ServerName&gt;&gt; regions)<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      throws IOException, KeeperException;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * Take a snapshot of the specified disabled region<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  protected void snapshotDisabledRegion(final HRegionInfo regionInfo)<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      throws IOException {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    snapshotManifest.addRegion(FSUtils.getTableDir(rootDir, snapshotTable), regionInfo);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    monitor.rethrowException();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    status.setStatus("Completed referencing HFiles for offline region " + regionInfo.toString() +<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        " of table: " + snapshotTable);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public void cancel(String why) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (finished) return;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.finished = true;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    LOG.info("Stop taking snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) +<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        " because: " + why);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    CancellationException ce = new CancellationException(why);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    monitor.receive(new ForeignException(master.getServerName().toString(), ce));<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  @Override<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  public boolean isFinished() {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return finished;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public long getCompletionTimestamp() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return this.status.getCompletionTimestamp();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  public SnapshotDescription getSnapshot() {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    return snapshot;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public ForeignException getExceptionIfFailed() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return monitor.getException();<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>  @Override<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public void rethrowExceptionIfFailed() throws ForeignException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    monitor.rethrowException();<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>  @Override<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public void rethrowException() throws ForeignException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    monitor.rethrowException();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @Override<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  public boolean hasException() {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return monitor.hasException();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  public ForeignException getException() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return monitor.getException();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>}<a name="line.339"></a>
 
 
 


[07/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
index ba72892..4c78c07 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
@@ -28,97 +28,110 @@
 <span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.util.Collection;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.util.Collections;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.commons.logging.Log;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.commons.logging.LogFactory;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FileStatus;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.master.cleaner.BaseHFileCleanerDelegate;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.snapshot.SnapshotReferenceUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>/**<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * Implementation of a file cleaner that checks if a hfile is still used by snapshots of HBase<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * tables.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> */<a name="line.41"></a>
-<span class="sourceLineNo">042</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceStability.Evolving<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class SnapshotHFileCleaner extends BaseHFileCleanerDelegate {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(SnapshotHFileCleaner.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  /**<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * Conf key for the frequency to attempt to refresh the cache of hfiles currently used in<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * snapshots (ms)<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   */<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public static final String HFILE_CACHE_REFRESH_PERIOD_CONF_KEY =<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      "hbase.master.hfilecleaner.plugins.snapshot.period";<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  /** Refresh cache, by default, every 5 minutes */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final long DEFAULT_HFILE_CACHE_REFRESH_PERIOD = 300000;<a name="line.55"></a>
+<span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.commons.logging.Log;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.commons.logging.LogFactory;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileStatus;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.FileSystem;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.fs.Path;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.cleaner.BaseHFileCleanerDelegate;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.snapshot.SnapshotReferenceUtil;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Implementation of a file cleaner that checks if a hfile is still used by snapshots of HBase<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * tables.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceStability.Evolving<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class SnapshotHFileCleaner extends BaseHFileCleanerDelegate {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(SnapshotHFileCleaner.class);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  /**<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * Conf key for the frequency to attempt to refresh the cache of hfiles currently used in<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * snapshots (ms)<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final String HFILE_CACHE_REFRESH_PERIOD_CONF_KEY =<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      "hbase.master.hfilecleaner.plugins.snapshot.period";<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  /** File cache for HFiles in the completed and currently running snapshots */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private SnapshotFileCache cache;<a name="line.58"></a>
+<span class="sourceLineNo">057</span>  /** Refresh cache, by default, every 5 minutes */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private static final long DEFAULT_HFILE_CACHE_REFRESH_PERIOD = 300000;<a name="line.58"></a>
 <span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  @Override<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public synchronized Iterable&lt;FileStatus&gt; getDeletableFiles(Iterable&lt;FileStatus&gt; files) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    try {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      return cache.getUnreferencedFiles(files);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    } catch (CorruptedSnapshotException cse) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      LOG.debug("Corrupted in-progress snapshot file exception, ignored ", cse);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    } catch (IOException e) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      LOG.error("Exception while checking if files were valid, keeping them just in case.", e);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    return Collections.emptyList();<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @Override<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  protected boolean isFileDeletable(FileStatus fStat) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    return false;<a name="line.74"></a>
+<span class="sourceLineNo">060</span>  /** File cache for HFiles in the completed and currently running snapshots */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private SnapshotFileCache cache;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private MasterServices master;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  @Override<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public synchronized Iterable&lt;FileStatus&gt; getDeletableFiles(Iterable&lt;FileStatus&gt; files) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    try {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      return cache.getUnreferencedFiles(files, master.getSnapshotManager());<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    } catch (CorruptedSnapshotException cse) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      LOG.debug("Corrupted in-progress snapshot file exception, ignored ", cse);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    } catch (IOException e) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      LOG.error("Exception while checking if files were valid, keeping them just in case.", e);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    return Collections.emptyList();<a name="line.74"></a>
 <span class="sourceLineNo">075</span>  }<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public void setConf(final Configuration conf) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    super.setConf(conf);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    try {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      long cacheRefreshPeriod = conf.getLong(HFILE_CACHE_REFRESH_PERIOD_CONF_KEY,<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        DEFAULT_HFILE_CACHE_REFRESH_PERIOD);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      final FileSystem fs = FSUtils.getCurrentFileSystem(conf);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      Path rootDir = FSUtils.getRootDir(conf);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      cache = new SnapshotFileCache(fs, rootDir, cacheRefreshPeriod, cacheRefreshPeriod,<a name="line.84"></a>
-<span class="sourceLineNo">085</span>          "snapshot-hfile-cleaner-cache-refresher", new SnapshotFileCache.SnapshotFileInspector() {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>            public Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir)<a name="line.86"></a>
-<span class="sourceLineNo">087</span>                throws IOException {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>              return SnapshotReferenceUtil.getHFileNames(conf, fs, snapshotDir);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>            }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>          });<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    } catch (IOException e) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      LOG.error("Failed to create cleaner util", e);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public void stop(String why) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.cache.stop(why);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public boolean isStopped() {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    return this.cache.isStopped();<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>  /**<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Exposed for Testing!<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @return the cache of all hfiles<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public SnapshotFileCache getFileCacheForTesting() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return this.cache;<a name="line.111"></a>
+<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void init(Map&lt;String, Object&gt; params) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    if (params.containsKey(HMaster.MASTER)) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      this.master = (MasterServices) params.get(HMaster.MASTER);<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><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected boolean isFileDeletable(FileStatus fStat) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return false;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public void setConf(final Configuration conf) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    super.setConf(conf);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    try {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      long cacheRefreshPeriod = conf.getLong(HFILE_CACHE_REFRESH_PERIOD_CONF_KEY,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        DEFAULT_HFILE_CACHE_REFRESH_PERIOD);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      final FileSystem fs = FSUtils.getCurrentFileSystem(conf);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      Path rootDir = FSUtils.getRootDir(conf);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      cache = new SnapshotFileCache(fs, rootDir, cacheRefreshPeriod, cacheRefreshPeriod,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          "snapshot-hfile-cleaner-cache-refresher", new SnapshotFileCache.SnapshotFileInspector() {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>            public Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir)<a name="line.98"></a>
+<span class="sourceLineNo">099</span>                throws IOException {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>              return SnapshotReferenceUtil.getHFileNames(conf, fs, snapshotDir);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>            }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          });<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    } catch (IOException e) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      LOG.error("Failed to create cleaner util", e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public void stop(String why) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.cache.stop(why);<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">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public boolean isStopped() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return this.cache.isStopped();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<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>   * Exposed for Testing!<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @return the cache of all hfiles<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public SnapshotFileCache getFileCacheForTesting() {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return this.cache;<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>
 
 
 


[32/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/MemStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStore.html
index 599f247..e2133a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStore.html
@@ -96,7 +96,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.35">MemStore</a>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.36">MemStore</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></pre>
 <div class="block">The MemStore holds in-memory modifications to the Store. Modifications are <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>s.
  <p>
@@ -225,7 +225,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.42">snapshot</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.43">snapshot</a>()</pre>
 <div class="block">Creates a snapshot of the current memstore. Snapshot must be cleared by call to
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#clearSnapshot(long)"><code>clearSnapshot(long)</code></a>.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver"><code>MemStoreSnapshot</code></a></dd></dl>
@@ -237,12 +237,12 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>clearSnapshot</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.50">clearSnapshot</a>(long&nbsp;id)
-                   throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.51">clearSnapshot</a>(long&nbsp;id)
+                   throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></pre>
 <div class="block">Clears the current snapshot of the Memstore.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>id</code> - </dd>
 <dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></code></dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#snapshot()"><code>snapshot()</code></a></dd></dl>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></code></dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#snapshot()"><code>snapshot()</code></a></dd></dl>
 </li>
 </ul>
 <a name="getFlushableSize()">
@@ -251,7 +251,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushableSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.60">getFlushableSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.61">getFlushableSize</a>()</pre>
 <div class="block">On flush, how much memory we will clear.
  Flush will first clear out the data in snapshot if any (It will take a second flush
  invocation to clear the current Cell set). If snapshot is empty, current
@@ -265,7 +265,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.66">getSnapshotSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.67">getSnapshotSize</a>()</pre>
 <div class="block">Return the size of the snapshot(s) if any</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>size of the memstore snapshot</dd></dl>
 </li>
@@ -276,7 +276,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.73">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.74">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Write an update</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>approximate size of the passed cell.</dd></dl>
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>timeOfOldestEdit</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.78">timeOfOldestEdit</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.79">timeOfOldestEdit</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Oldest timestamp of all the Cells in the MemStore</dd></dl>
 </li>
 </ul>
@@ -298,7 +298,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.85">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;deleteCell)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.86">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;deleteCell)</pre>
 <div class="block">Write a delete</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>deleteCell</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>approximate size of the passed key and value.</dd></dl>
@@ -310,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>updateColumnValue</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.102">updateColumnValue</a>(byte[]&nbsp;row,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.103">updateColumnValue</a>(byte[]&nbsp;row,
                      byte[]&nbsp;family,
                      byte[]&nbsp;qualifier,
                      long&nbsp;newValue,
@@ -331,7 +331,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>upsert</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.119">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.120">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
           long&nbsp;readpoint)</pre>
 <div class="block">Update or insert the specified cells.
  <p>
@@ -353,7 +353,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanners</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.125">getScanners</a>(long&nbsp;readPt)
+<pre><a href="http://docs.oracle.com/javase/7/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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.126">getScanners</a>(long&nbsp;readPt)
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>scanner over the memstore. This might include scanner over the snapshot when one is
  present.</dd>
@@ -367,7 +367,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.130">size</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.131">size</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Total memory occupied by this MemStore.</dd></dl>
 </li>
 </ul>
@@ -377,7 +377,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>finalizeFlush</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.137">finalizeFlush</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.138">finalizeFlush</a>()</pre>
 <div class="block">This method is called when it is clear that the flush to disk is completed.
  The store may do any post-flush actions at this point.
  One example is to update the wal with sequence number that is known only at the store level.</div>
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isSloppy</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.140">isSloppy</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStore.html#line.141">isSloppy</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html
index e00a29a..edda8f8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.239">MemStoreChunkPool.PooledChunk</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.245">MemStoreChunkPool.PooledChunk</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a></pre>
 </li>
 </ul>
@@ -169,7 +169,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MemStoreChunkPool.PooledChunk</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html#line.240">MemStoreChunkPool.PooledChunk</a>(int&nbsp;size)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html#line.246">MemStoreChunkPool.PooledChunk</a>(int&nbsp;size)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html
index b540c18..68cba09 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.164">MemStoreChunkPool.StatisticsThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.169">MemStoreChunkPool.StatisticsThread</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -218,7 +218,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MemStoreChunkPool.StatisticsThread</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html#line.165">MemStoreChunkPool.StatisticsThread</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html#line.170">MemStoreChunkPool.StatisticsThread</a>()</pre>
 </li>
 </ul>
 </li>
@@ -235,7 +235,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html#line.171">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html#line.176">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -250,7 +250,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html#line.175">logStats</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.StatisticsThread.html#line.180">logStats</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html
index 0dd4aa0..b0f343b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html
@@ -93,12 +93,17 @@
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></dd>
+</dl>
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.55">MemStoreChunkPool</a>
-extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-<div class="block">A pool of <code>HeapMemStoreLAB.Chunk</code> instances.
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.56">MemStoreChunkPool</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></pre>
+<div class="block">A pool of <a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.
  
  MemStoreChunkPool caches a number of retired chunks for reusing, it could
  decrease allocating bytes when writing, thereby optimizing the garbage
@@ -160,19 +165,19 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#CHUNK_POOL_MAXSIZE_KEY">CHUNK_POOL_MAXSIZE_KEY</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#chunkCount">chunkCount</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#chunkPoolDisabled">chunkPoolDisabled</a></strong></code>
 <div class="block">Boolean whether we have disabled the memstore chunk pool entirely.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#chunkSize">chunkSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#createdChunkCount">createdChunkCount</a></strong></code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#GLOBAL_INSTANCE">GLOBAL_INSTANCE</a></strong></code>&nbsp;</td>
@@ -194,20 +199,24 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#POOL_MAX_SIZE_DEFAULT">POOL_MAX_SIZE_DEFAULT</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private float</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#poolSizePercentage">poolSizePercentage</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#reclaimedChunks">reclaimedChunks</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#reusedChunkCount">reusedChunkCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#scheduleThreadPool">scheduleThreadPool</a></strong></code>
 <div class="block">Statistics thread schedule pool</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#statThreadPeriod">statThreadPeriod</a></strong></code>
 <div class="block">Statistics thread</div>
@@ -228,10 +237,11 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#MemStoreChunkPool(org.apache.hadoop.conf.Configuration,%20int,%20int,%20int)">MemStoreChunkPool</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#MemStoreChunkPool(org.apache.hadoop.conf.Configuration,%20int,%20int,%20int,%20float)">MemStoreChunkPool</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   int&nbsp;chunkSize,
                                   int&nbsp;maxCount,
-                                  int&nbsp;initialCount)</code>&nbsp;</td>
+                                  int&nbsp;initialCount,
+                                  float&nbsp;poolSizePercentage)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -276,13 +286,20 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#getPoolSize()">getPoolSize</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#onHeapMemoryTune(long,%20long)">onHeapMemoryTune</a></strong>(long&nbsp;newMemstoreSize,
+                                long&nbsp;newBlockCacheSize)</code>
+<div class="block">This method would be called by HeapMemoryManger when a heap memory tune action took place.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#putbackChunk(org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.PooledChunk)">putbackChunk</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&nbsp;chunk)</code>
 <div class="block">Add the chunk to the pool, if the pool has achieved the max size, it will
  skip it</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#putbackChunks(java.util.concurrent.BlockingQueue)">putbackChunks</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&gt;&nbsp;chunks)</code>
 <div class="block">Add the chunks to the pool, when the pool achieves the max size, it will
@@ -317,7 +334,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.56">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.57">LOG</a></pre>
 </li>
 </ul>
 <a name="CHUNK_POOL_MAXSIZE_KEY">
@@ -326,7 +343,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>CHUNK_POOL_MAXSIZE_KEY</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.57">CHUNK_POOL_MAXSIZE_KEY</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.58">CHUNK_POOL_MAXSIZE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.CHUNK_POOL_MAXSIZE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -336,7 +353,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>CHUNK_POOL_INITIALSIZE_KEY</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.58">CHUNK_POOL_INITIALSIZE_KEY</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.59">CHUNK_POOL_INITIALSIZE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.CHUNK_POOL_INITIALSIZE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -346,7 +363,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>POOL_MAX_SIZE_DEFAULT</h4>
-<pre>static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.59">POOL_MAX_SIZE_DEFAULT</a></pre>
+<pre>static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.60">POOL_MAX_SIZE_DEFAULT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.POOL_MAX_SIZE_DEFAULT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -356,7 +373,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>POOL_INITIAL_SIZE_DEFAULT</h4>
-<pre>static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.60">POOL_INITIAL_SIZE_DEFAULT</a></pre>
+<pre>static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.61">POOL_INITIAL_SIZE_DEFAULT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.POOL_INITIAL_SIZE_DEFAULT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -366,7 +383,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>GLOBAL_INSTANCE</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.63">GLOBAL_INSTANCE</a></pre>
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.64">GLOBAL_INSTANCE</a></pre>
 </li>
 </ul>
 <a name="chunkPoolDisabled">
@@ -375,7 +392,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>chunkPoolDisabled</h4>
-<pre>static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.65">chunkPoolDisabled</a></pre>
+<pre>static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.66">chunkPoolDisabled</a></pre>
 <div class="block">Boolean whether we have disabled the memstore chunk pool entirely.</div>
 </li>
 </ul>
@@ -385,7 +402,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>maxCount</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.67">maxCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.68">maxCount</a></pre>
 </li>
 </ul>
 <a name="reclaimedChunks">
@@ -394,7 +411,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>reclaimedChunks</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.70">reclaimedChunks</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.71">reclaimedChunks</a></pre>
 </li>
 </ul>
 <a name="chunkSize">
@@ -403,7 +420,16 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>chunkSize</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.71">chunkSize</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.72">chunkSize</a></pre>
+</li>
+</ul>
+<a name="poolSizePercentage">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>poolSizePercentage</h4>
+<pre>private final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.73">poolSizePercentage</a></pre>
 </li>
 </ul>
 <a name="scheduleThreadPool">
@@ -412,7 +438,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scheduleThreadPool</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.74">scheduleThreadPool</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.76">scheduleThreadPool</a></pre>
 <div class="block">Statistics thread schedule pool</div>
 </li>
 </ul>
@@ -422,18 +448,18 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>statThreadPeriod</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.76">statThreadPeriod</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.78">statThreadPeriod</a></pre>
 <div class="block">Statistics thread</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.statThreadPeriod">Constant Field Values</a></dd></dl>
 </li>
 </ul>
-<a name="createdChunkCount">
+<a name="chunkCount">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>createdChunkCount</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.77">createdChunkCount</a></pre>
+<h4>chunkCount</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.79">chunkCount</a></pre>
 </li>
 </ul>
 <a name="reusedChunkCount">
@@ -442,7 +468,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>reusedChunkCount</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.78">reusedChunkCount</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.80">reusedChunkCount</a></pre>
 </li>
 </ul>
 </li>
@@ -453,16 +479,17 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="MemStoreChunkPool(org.apache.hadoop.conf.Configuration, int, int, int)">
+<a name="MemStoreChunkPool(org.apache.hadoop.conf.Configuration, int, int, int, float)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MemStoreChunkPool</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.80">MemStoreChunkPool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.82">MemStoreChunkPool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  int&nbsp;chunkSize,
                  int&nbsp;maxCount,
-                 int&nbsp;initialCount)</pre>
+                 int&nbsp;initialCount,
+                 float&nbsp;poolSizePercentage)</pre>
 </li>
 </ul>
 </li>
@@ -479,7 +506,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.108">getChunk</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.111">getChunk</a>()</pre>
 <div class="block">Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have
  not yet created max allowed chunks count. When we have already created max allowed chunks and
  no free chunks as of now, return null. It is the responsibility of the caller to make a chunk
@@ -495,7 +522,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>putbackChunks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.135">putbackChunks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&gt;&nbsp;chunks)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.138">putbackChunks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&gt;&nbsp;chunks)</pre>
 <div class="block">Add the chunks to the pool, when the pool achieves the max size, it will
  skip the remaining chunks</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>chunks</code> - </dd></dl>
@@ -507,7 +534,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>putbackChunk</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.148">putbackChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&nbsp;chunk)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.152">putbackChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.PooledChunk.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool.PooledChunk</a>&nbsp;chunk)</pre>
 <div class="block">Add the chunk to the pool, if the pool has achieved the max size, it will
  skip it</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>chunk</code> - </dd></dl>
@@ -519,7 +546,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getPoolSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.153">getPoolSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.158">getPoolSize</a>()</pre>
 </li>
 </ul>
 <a name="clearChunks()">
@@ -528,7 +555,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>clearChunks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.160">clearChunks</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.165">clearChunks</a>()</pre>
 </li>
 </ul>
 <a name="getPool(org.apache.hadoop.conf.Configuration)">
@@ -537,7 +564,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getPool</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.194">getPool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.199">getPool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>conf</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>the global MemStoreChunkPool instance</dd></dl>
 </li>
@@ -548,16 +575,32 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxCount</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.230">getMaxCount</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.236">getMaxCount</a>()</pre>
 </li>
 </ul>
 <a name="clearDisableFlag()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>clearDisableFlag</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.235">clearDisableFlag</a>()</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.241">clearDisableFlag</a>()</pre>
+</li>
+</ul>
+<a name="onHeapMemoryTune(long, long)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>onHeapMemoryTune</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#line.252">onHeapMemoryTune</a>(long&nbsp;newMemstoreSize,
+                    long&nbsp;newBlockCacheSize)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html#onHeapMemoryTune(long,%20long)">HeapMemoryManager.HeapMemoryTuneObserver</a></code></strong></div>
+<div class="block">This method would be called by HeapMemoryManger when a heap memory tune action took place.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html#onHeapMemoryTune(long,%20long)">onHeapMemoryTune</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>newMemstoreSize</code> - The newly calculated global memstore size</dd><dd><code>newBlockCacheSize</code> - The newly calculated global blockcache size</dd></dl>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html
index 240d29e..691f845 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.StripeFlushRequest.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" target="_top">Frames</a></li>
@@ -543,7 +543,7 @@ implements org.apache.hadoop.io.Writable</pre>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.StripeFlushRequest.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html b/devapidocs/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html
deleted file mode 100644
index c2074c7..0000000
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html
+++ /dev/null
@@ -1,336 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<script type="text/javascript"><!--
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)";
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
-<!--   -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/UnexpectedStateException.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" target="_top">Frames</a></li>
-<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods_inherited_from_class_java.lang.Throwable">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip-navbar_top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.regionserver</div>
-<h2 title="Class UnexpectedStateException" class="title">Class UnexpectedStateException</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.regionserver.UnexpectedStateException</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
-</dl>
-<hr>
-<br>
-<pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#line.24">UnexpectedStateException</a>
-extends <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.regionserver.UnexpectedStateException">Serialized Form</a></dd></dl>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field_summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#serialVersionUID">serialVersionUID</a></strong></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor_summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#UnexpectedStateException()">UnexpectedStateException</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#UnexpectedStateException(java.lang.String)">UnexpectedStateException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#UnexpectedStateException(java.lang.String,%20java.lang.Throwable)">UnexpectedStateException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
-                                                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#UnexpectedStateException(java.lang.Throwable)">UnexpectedStateException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method_summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.lang.Throwable">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed(java.lang.Throwable)" title="class or interface in java.lang">addSuppressed</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or inter
 face in java.lang">getStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed()" title="class or interface in java.lang">getSuppressed</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lan
 g/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field_detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="serialVersionUID">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#line.26">serialVersionUID</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.UnexpectedStateException.serialVersionUID">Constant Field Values</a></dd></dl>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor_detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="UnexpectedStateException()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>UnexpectedStateException</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#line.28">UnexpectedStateException</a>()</pre>
-</li>
-</ul>
-<a name="UnexpectedStateException(java.lang.String)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>UnexpectedStateException</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#line.32">UnexpectedStateException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
-</li>
-</ul>
-<a name="UnexpectedStateException(java.lang.String, java.lang.Throwable)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>UnexpectedStateException</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#line.36">UnexpectedStateException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
-                        <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
-</li>
-</ul>
-<a name="UnexpectedStateException(java.lang.Throwable)">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>UnexpectedStateException</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html#line.40">UnexpectedStateException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
-<!--   -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/UnexpectedStateException.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" target="_top">Frames</a></li>
-<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods_inherited_from_class_java.lang.Throwable">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip-navbar_bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html b/devapidocs/org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html
index e99adfd..fae2e70 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/WrongRegionException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -308,7 +308,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/WrongRegionException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html
new file mode 100644
index 0000000..e24f361
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Interface org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Interface org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">Frames</a></li>
+<li><a href="HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Interface org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver" class="title">Uses of Interface<br>org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a> in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a> that implement <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></strong></code>
+<div class="block">A pool of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a> with type parameters of type <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/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/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>&gt;</code></td>
+<td class="colLast"><span class="strong">HeapMemoryManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#tuneObservers">tuneObservers</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">HeapMemoryManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#registerTuneObserver(org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver)">registerTuneObserver</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>&nbsp;observer)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/class-use/HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">Frames</a></li>
+<li><a href="HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[50/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 69b1e30..170921a 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -280,10 +280,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>1818</td>
+<td>1821</td>
 <td>0</td>
 <td>0</td>
-<td>11705</td></tr></table></div>
+<td>11714</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -1353,2625 +1353,2635 @@
 <td>0</td>
 <td>1</td></tr>
 <tr class="b">
+<td><a href="#org.apache.hadoop.hbase.exceptions.UnexpectedStateException.java">org/apache/hadoop/hbase/exceptions/UnexpectedStateException.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.executor.EventHandler.java">org/apache/hadoop/hbase/executor/EventHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.executor.EventType.java">org/apache/hadoop/hbase/executor/EventType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.executor.ExecutorService.java">org/apache/hadoop/hbase/executor/ExecutorService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.executor.ExecutorType.java">org/apache/hadoop/hbase/executor/ExecutorType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.BinaryComparator.java">org/apache/hadoop/hbase/filter/BinaryComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.BinaryPrefixComparator.java">org/apache/hadoop/hbase/filter/BinaryPrefixComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.BitComparator.java">org/apache/hadoop/hbase/filter/BitComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ByteArrayComparable.java">org/apache/hadoop/hbase/filter/ByteArrayComparable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnCountGetFilter.java">org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnPaginationFilter.java">org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnRangeFilter.java">org/apache/hadoop/hbase/filter/ColumnRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.CompareFilter.java">org/apache/hadoop/hbase/filter/CompareFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.DependentColumnFilter.java">org/apache/hadoop/hbase/filter/DependentColumnFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FamilyFilter.java">org/apache/hadoop/hbase/filter/FamilyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.Filter.java">org/apache/hadoop/hbase/filter/Filter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterBase.java">org/apache/hadoop/hbase/filter/FilterBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterList.java">org/apache/hadoop/hbase/filter/FilterList.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterWrapper.java">org/apache/hadoop/hbase/filter/FilterWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter.java">org/apache/hadoop/hbase/filter/FirstKeyOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FirstKeyValueMatchingQualifiersFilter.java">org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FuzzyRowFilter.java">org/apache/hadoop/hbase/filter/FuzzyRowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.InclusiveStopFilter.java">org/apache/hadoop/hbase/filter/InclusiveStopFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.KeyOnlyFilter.java">org/apache/hadoop/hbase/filter/KeyOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.LongComparator.java">org/apache/hadoop/hbase/filter/LongComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.MultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.NullComparator.java">org/apache/hadoop/hbase/filter/NullComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.PageFilter.java">org/apache/hadoop/hbase/filter/PageFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ParseConstants.java">org/apache/hadoop/hbase/filter/ParseConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.ParseFilter.java">org/apache/hadoop/hbase/filter/ParseFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.PrefixFilter.java">org/apache/hadoop/hbase/filter/PrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.QualifierFilter.java">org/apache/hadoop/hbase/filter/QualifierFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.RandomRowFilter.java">org/apache/hadoop/hbase/filter/RandomRowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.RegexStringComparator.java">org/apache/hadoop/hbase/filter/RegexStringComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.RowFilter.java">org/apache/hadoop/hbase/filter/RowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/SingleColumnValueExcludeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.SingleColumnValueFilter.java">org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.SkipFilter.java">org/apache/hadoop/hbase/filter/SkipFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.SubstringComparator.java">org/apache/hadoop/hbase/filter/SubstringComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TimestampsFilter.java">org/apache/hadoop/hbase/filter/TimestampsFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ValueFilter.java">org/apache/hadoop/hbase/filter/ValueFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.WhileMatchFilter.java">org/apache/hadoop/hbase/filter/WhileMatchFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.fs.HFileSystem.java">org/apache/hadoop/hbase/fs/HFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.ClickjackingPreventionFilter.java">org/apache/hadoop/hbase/http/ClickjackingPreventionFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.HtmlQuoting.java">org/apache/hadoop/hbase/http/HtmlQuoting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.HttpConfig.java">org/apache/hadoop/hbase/http/HttpConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.HttpRequestLog.java">org/apache/hadoop/hbase/http/HttpRequestLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.HttpRequestLogAppender.java">org/apache/hadoop/hbase/http/HttpRequestLogAppender.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.HttpServer.java">org/apache/hadoop/hbase/http/HttpServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>45</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.InfoServer.java">org/apache/hadoop/hbase/http/InfoServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.NoCacheFilter.java">org/apache/hadoop/hbase/http/NoCacheFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.ServerConfigurationKeys.java">org/apache/hadoop/hbase/http/ServerConfigurationKeys.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.SslSocketConnectorSecure.java">org/apache/hadoop/hbase/http/SslSocketConnectorSecure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.conf.ConfServlet.java">org/apache/hadoop/hbase/http/conf/ConfServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.jmx.JMXJsonServlet.java">org/apache/hadoop/hbase/http/jmx/JMXJsonServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.lib.StaticUserWebFilter.java">org/apache/hadoop/hbase/http/lib/StaticUserWebFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.log.LogLevel.java">org/apache/hadoop/hbase/http/log/LogLevel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.BoundedByteBufferPool.java">org/apache/hadoop/hbase/io/BoundedByteBufferPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.ByteBuffInputStream.java">org/apache/hadoop/hbase/io/ByteBuffInputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.ByteBufferOutputStream.java">org/apache/hadoop/hbase/io/ByteBufferOutputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.ByteBufferPool.java">org/apache/hadoop/hbase/io/ByteBufferPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.CellOutputStream.java">org/apache/hadoop/hbase/io/CellOutputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.FSDataInputStreamWrapper.java">org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.FileLink.java">org/apache/hadoop/hbase/io/FileLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.HFileLink.java">org/apache/hadoop/hbase/io/HFileLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.HalfStoreFileReader.java">org/apache/hadoop/hbase/io/HalfStoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.HeapSize.java">org/apache/hadoop/hbase/io/HeapSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.ImmutableBytesWritable.java">org/apache/hadoop/hbase/io/ImmutableBytesWritable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.Reference.java">org/apache/hadoop/hbase/io/Reference.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.TagCompressionContext.java">org/apache/hadoop/hbase/io/TagCompressionContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.TimeRange.java">org/apache/hadoop/hbase/io/TimeRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.WALLink.java">org/apache/hadoop/hbase/io/WALLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutput.java">org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutput.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.java">org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputSaslHelper.java">org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputSaslHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.compress.Compression.java">org/apache/hadoop/hbase/io/compress/Compression.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Cipher.java">org/apache/hadoop/hbase/io/crypto/Cipher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Context.java">org/apache/hadoop/hbase/io/crypto/Context.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Decryptor.java">org/apache/hadoop/hbase/io/crypto/Decryptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Encryption.java">org/apache/hadoop/hbase/io/crypto/Encryption.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>53</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Encryptor.java">org/apache/hadoop/hbase/io/crypto/Encryptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.KeyProvider.java">org/apache/hadoop/hbase/io/crypto/KeyProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.aes.AES.java">org/apache/hadoop/hbase/io/crypto/aes/AES.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.aes.AESDecryptor.java">org/apache/hadoop/hbase/io/crypto/aes/AESDecryptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.aes.AESEncryptor.java">org/apache/hadoop/hbase/io/crypto/aes/AESEncryptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder.java">org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.DataBlockEncoder.java">org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.DataBlockEncoding.java">org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>10</td></tr>
-<tr class="a">
+<td>11</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.EncodedDataBlock.java">org/apache/hadoop/hbase/io/encoding/EncodedDataBlock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext.java">org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext.java">org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext.java">org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
+<tr class="b">
+<td><a href="#org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.java">org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
 <tr class="a">
+<td><a href="#org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.java">org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hadoopbackport.ThrottledInputStream.java">org/apache/hadoop/hbase/io/hadoopbackport/ThrottledInputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCache.java">org/apache/hadoop/hbase/io/hfile/BlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCacheKey.java">org/apache/hadoop/hbase/io/hfile/BlockCacheKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.java">org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCachesIterator.java">org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockType.java">org/apache/hadoop/hbase/io/hfile/BlockType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheConfig.java">org/apache/hadoop/hbase/io/hfile/CacheConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheableDeserializer.java">org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheableDeserializerIdManager.java">org/apache/hadoop/hbase/io/hfile/CacheableDeserializerIdManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.ChecksumUtil.java">org/apache/hadoop/hbase/io/hfile/ChecksumUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.java">org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CompoundBloomFilter.java">org/apache/hadoop/hbase/io/hfile/CompoundBloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CompoundBloomFilterBase.java">org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CompoundBloomFilterWriter.java">org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CorruptHFileException.java">org/apache/hadoop/hbase/io/hfile/CorruptHFileException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFile.java">org/apache/hadoop/hbase/io/hfile/HFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileBlock.java">org/apache/hadoop/hbase/io/hfile/HFileBlock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>45</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileBlockIndex.java">org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileContext.java">org/apache/hadoop/hbase/io/hfile/HFileContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder.java">org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl.java">org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFilePrettyPrinter.java">org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileReaderImpl.java">org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>49</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileScanner.java">org/apache/hadoop/hbase/io/hfile/HFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileWriterImpl.java">org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.LruBlockCache.java">org/apache/hadoop/hbase/io/hfile/LruBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.LruCachedBlock.java">org/apache/hadoop/hbase/io/hfile/LruCachedBlock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.LruCachedBlockQueue.java">org/apache/hadoop/hbase/io/hfile/LruCachedBlockQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.MemcachedBlockCache.java">org/apache/hadoop/hbase/io/hfile/MemcachedBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.NoOpDataBlockEncoder.java">org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.PrefetchExecutor.java">org/apache/hadoop/hbase/io/hfile/PrefetchExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketCache.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.ByteBufferIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.CachedEntryQueue.java">org/apache/hadoop/hbase/io/hfile/bucket/CachedEntryQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.FileIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.IOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap.java">org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.util.HeapMemorySizeUtil.java">org/apache/hadoop/hbase/io/util/HeapMemorySizeUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.util.LRUDictionary.java">org/apache/hadoop/hbase/io/util/LRUDictionary.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.util.StreamUtils.java">org/apache/hadoop/hbase/io/util/StreamUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.AsyncRpcClient.java">org/apache/hadoop/hbase/ipc/AsyncRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.BufferChain.java">org/apache/hadoop/hbase/ipc/BufferChain.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.CallRunner.java">org/apache/hadoop/hbase/ipc/CallRunner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.FastPathBalancedQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/FastPathBalancedQueueRpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.FifoRpcScheduler.java">org/apache/hadoop/hbase/ipc/FifoRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.IPCUtil.java">org/apache/hadoop/hbase/ipc/IPCUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.MetricsHBaseServer.java">org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.MetricsHBaseServerSourceImpl.java">org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController.java">org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.PriorityFunction.java">org/apache/hadoop/hbase/ipc/PriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcCallContext.java">org/apache/hadoop/hbase/ipc/RpcCallContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcClientImpl.java">org/apache/hadoop/hbase/ipc/RpcClientImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcExecutor.java">org/apache/hadoop/hbase/ipc/RpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcScheduler.java">org/apache/hadoop/hbase/ipc/RpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcSchedulerContext.java">org/apache/hadoop/hbase/ipc/RpcSchedulerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServer.java">org/apache/hadoop/hbase/ipc/RpcServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServerInterface.java">org/apache/hadoop/hbase/ipc/RpcServerInterface.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.java">org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.Driver.java">org/apache/hadoop/hbase/mapred/Driver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.GroupingTableMap.java">org/apache/hadoop/hbase/mapred/GroupingTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.HRegionPartitioner.java">org/apache/hadoop/hbase/mapred/HRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.IdentityTableMap.java">org/apache/hadoop/hbase/mapred/IdentityTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.IdentityTableReduce.java">org/apache/hadoop/hbase/mapred/IdentityTableReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.MultiTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapred/MultiTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.RowCounter.java">org/apache/hadoop/hbase/mapred/RowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableInputFormat.java">org/apache/hadoop/hbase/mapred/TableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableInputFormatBase.java">org/apache/hadoop/hbase/mapred/TableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableMap.java">org/apache/hadoop/hbase/mapred/TableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableMapReduceUtil.java">org/apache/hadoop/hbase/mapred/TableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableOutputFormat.java">org/apache/hadoop/hbase/mapred/TableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableRecordReader.java">org/apache/hadoop/hbase/mapred/TableRecordReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableRecordReaderImpl.java">org/apache/hadoop/hbase/mapred/TableRecordReaderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableReduce.java">org/apache/hadoop/hbase/mapred/TableReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapred/TableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableSplit.java">org/apache/hadoop/hbase/mapred/TableSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCounter.java">org/apache/hadoop/hbase/mapreduce/CellCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCreator.java">org/apache/hadoop/hbase/mapreduce/CellCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CopyTable.java">org/apache/hadoop/hbase/mapreduce/CopyTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.DefaultVisibilityExpressionResolver.java">org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Driver.java">org/apache/hadoop/hbase/mapreduce/Driver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Export.java">org/apache/hadoop/hbase/mapreduce/Export.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.GroupingTableMapper.java">org/apache/hadoop/hbase/mapreduce/GroupingTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.java">org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HRegionPartitioner.java">org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HashTable.java">org/apache/hadoop/hbase/mapreduce/HashTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IdentityTableMapper.java">org/apache/hadoop/hbase/mapreduce/IdentityTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IdentityTableReducer.java">org/apache/hadoop/hbase/mapreduce/IdentityTableReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Import.java">org/apache/hadoop/hbase/mapreduce/Import.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ImportTsv.java">org/apache/hadoop/hbase/mapreduce/ImportTsv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IndexBuilder.java">org/apache/hadoop/hbase/mapreduce/IndexBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.JarFinder.java">org/apache/hadoop/hbase/mapreduce/JarFinder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.JobUtil.java">org/apache/hadoop/hbase/mapreduce/JobUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.KeyValueSortReducer.java">org/apache/hadoop/hbase/mapreduce/KeyValueSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.java">org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiHFileOutputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiHFileOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableOutputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableSnapshotInputFormatImpl.java">org/apache/hadoop/hbase/mapreduce/MultiTableSnapshotInputFormatImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultithreadedTableMapper.java">org/apache/hadoop/hbase/mapreduce/MultithreadedTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.PutCombiner.java">org/apache/hadoop/hbase/mapreduce/PutCombiner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.PutSortReducer.java">org/apache/hadoop/hbase/mapreduce/PutSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ResultSerialization.java">org/apache/hadoop/hbase/mapreduce/ResultSerialization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.RowCounter.java">org/apache/hadoop/hbase/mapreduce/RowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SampleUploader.java">org/apache/hadoop/hbase/mapreduce/SampleUploader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SimpleTotalOrderPartitioner.java">org/apache/hadoop/hbase/mapreduce/SimpleTotalOrderPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SyncTable.java">org/apache/hadoop/hbase/mapreduce/SyncTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableInputFormat.java">org/apache/hadoop/hbase/mapreduce/TableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.java">org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableMapper.java">org/apache/hadoop/hbase/mapreduce/TableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableOutputCommitter.java">org/apache/hadoop/hbase/mapreduce/TableOutputCommitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableOutputFormat.java">org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableRecordReader.java">org/apache/hadoop/hbase/mapreduce/TableRecordReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.java">org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableReducer.java">org/apache/hadoop/hbase/mapreduce/TableReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormatImpl.java">org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSplit.java">org/apache/hadoop/hbase/mapreduce/TableSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TextSortReducer.java">org/apache/hadoop/hbase/mapreduce/TextSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TsvImporterMapper.java">org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TsvImporterTextMapper.java">org/apache/hadoop/hbase/mapreduce/TsvImporterTextMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.VisibilityExpressionResolver.java">org/apache/hadoop/hbase/mapreduce/VisibilityExpressionResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.WALInputFormat.java">org/apache/hadoop/hbase/mapreduce/WALInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.WALPlayer.java">org/apache/hadoop/hbase/mapreduce/WALPlayer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication.java">org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ActiveMasterManager.java">org/apache/hadoop/hbase/master/ActiveMasterManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.AssignCallable.java">org/apache/hadoop/hbase/master/AssignCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentListener.java">org/apache/hadoop/hbase/master/AssignmentListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentManager.java">org/apache/hadoop/hbase/master/AssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>159</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentVerificationReport.java">org/apache/hadoop/hbase/master/AssignmentVerificationReport.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.BulkAssigner.java">org/apache/hadoop/hbase/master/BulkAssigner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.BulkReOpen.java">org/apache/hadoop/hbase/master/BulkReOpen.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.CatalogJanitor.java">org/apache/hadoop/hbase/master/CatalogJanitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterSchemaServiceImpl.java">org/apache/hadoop/hbase/master/ClusterSchemaServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterStatusPublisher.java">org/apache/hadoop/hbase/master/ClusterStatusPublisher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.DeadServer.java">org/apache/hadoop/hbase/master/DeadServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.GeneralBulkAssigner.java">org/apache/hadoop/hbase/master/GeneralBulkAssigner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.HMaster.java">org/apache/hadoop/hbase/master/HMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>49</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.LoadBalancer.java">org/apache/hadoop/hbase/master/LoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterCoprocessorHost.java">org/apache/hadoop/hbase/master/MasterCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterDumpServlet.java">org/apache/hadoop/hbase/master/MasterDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterFileSystem.java">org/apache/hadoop/hbase/master/MasterFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterMetaBootstrap.java">org/apache/hadoop/hbase/master/MasterMetaBootstrap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterServices.java">org/apache/hadoop/hbase/master/MasterServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterStatusServlet.java">org/apache/hadoop/hbase/master/MasterStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterWalManager.java">org/apache/hadoop/hbase/master/MasterWalManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsAssignmentManager.java">org/apache/hadoop/hbase/master/MetricsAssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsAssignmentManagerSourceImpl.java">org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMaster.java">org/apache/hadoop/hbase/master/MetricsMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterProcSource.java">org/apache/hadoop/hbase/master/MetricsMasterProcSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterSourceImpl.java">org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterWrapperImpl.java">org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RackManager.java">org/apache/hadoop/hbase/master/RackManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>195</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionPlan.java">org/apache/hadoop/hbase/master/RegionPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RegionState.java">org/apache/hadoop/hbase/master/RegionState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>96</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionStateStore.java">org/apache/hadoop/hbase/master/RegionStateStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RegionStates.java">org/apache/hadoop/hbase/master/RegionStates.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ServerManager.java">org/apache/hadoop/hbase/master/ServerManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta.java">org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.SnapshotSentinel.java">org/apache/hadoop/hbase/master/SnapshotSentinel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.SplitLogManager.java">org/apache/hadoop/hbase/master/SplitLogManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TableLockManager.java">org/apache/hadoop/hbase/master/TableLockManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TableNamespaceManager.java">org/apache/hadoop/hbase/master/TableNamespaceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TableStateManager.java">org/apache/hadoop/hbase/master/TableStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.UnAssignCallable.java">org/apache/hadoop/hbase/master/UnAssignCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <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>75</td></tr>
-<tr class="b">
+<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>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredNodeAssignmentHelper.java">org/apache/hadoop/hbase/master/balancer/FavoredNodeAssignmentHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredNodeLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredNodeLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredNodesPlan.java">org/apache/hadoop/hbase/master/balancer/FavoredNodesPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.MetricsBalancerSourceImpl.java">org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.MetricsStochasticBalancerSourceImpl.java">org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseLogCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.CleanerChore.java">org/apache/hadoop/hbase/master/cleaner/CleanerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>1</td></tr>
-<tr class="b">
+<td>2</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.ReplicationMetaCleaner.java">org/apache/hadoop/hbase/master/cleaner/ReplicationMetaCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.MergeNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/MergeNormalizationPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.SimpleRegionNormalizer.java">org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure.java">org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteColumnFamilyProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DisableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DispatchMergingRegionsProcedure.java">org/apache/hadoop/hbase/master/procedure/DispatchMergingRegionsProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.EnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterDDLOperationHelper.java">org/apache/hadoop/hbase/master/procedure/MasterDDLOperationHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyColumnFamilyProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>45</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>71</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.java">org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.RestoreSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.DisabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.java">org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>16</td></tr>
-<tr class="b">
+<td>20</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.metrics.BaseSourceImpl.java">org/apache/hadoop/hbase/metrics/BaseSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.CachedMobFile.java">org/apache/hadoop/hbase/mob/CachedMobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor.java">org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFile.java">org/apache/hadoop/hbase/mob/MobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileCache.java">org/apache/hadoop/hbase/mob/MobFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.MobCompactor.java">org/apache/hadoop/hbase/mob/compactions/MobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.MemStoreWrapper.java">org/apache/hadoop/hbase/mob/mapreduce/MemStoreWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.SweepJob.java">org/apache/hadoop/hbase/mob/mapreduce/SweepJob.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.SweepReducer.java">org/apache/hadoop/hbase/mob/mapreduce/SweepReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.Sweeper.java">org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.LogMonitoring.java">org/apache/hadoop/hbase/monitoring/LogMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer.java">org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandler.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandlerImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredTaskImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.StateDumpServlet.java">org/apache/hadoop/hbase/monitoring/StateDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.SingleByteBuff.java">org/apache/hadoop/hbase/nio/SingleByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.TimeoutBlockingQueue.java">org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>178</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.RequestConverter.java">org/apache/hadoop/hbase/protobuf/RequestConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>203</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ResponseConverter.java">org/apache/hadoop/hbase/protobuf/ResponseConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.MasterQuotaManager.java">org/apache/hadoop/hbase/quotas/MasterQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottlingException.java">org/apache/hadoop/hbase/quotas/ThrottlingException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplitThread.java">org/apache/hadoop/hbase/regionserver/CompactSplitThread.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionRequestor.java">org/apache/hadoop/hbase/regionserver/CompactionRequestor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr cla

<TRUNCATED>

[19/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffCompressionState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffCompressionState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffCompressionState.html
index 81bd916..b58512b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffCompressionState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffCompressionState.html
@@ -386,152 +386,154 @@
 <span class="sourceLineNo">378</span>    private int rowLengthWithSize;<a name="line.378"></a>
 <span class="sourceLineNo">379</span>    private int familyLengthWithSize;<a name="line.379"></a>
 <span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    public FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      super(tmpPair, includeTags);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void copyFromNext(SeekerState that) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      super.copyFromNext(that);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      FastDiffSeekerState other = (FastDiffSeekerState) that;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      System.arraycopy(other.prevTimestampAndType, 0,<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          prevTimestampAndType, 0,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          KeyValue.TIMESTAMP_TYPE_SIZE);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      familyLengthWithSize = other.familyLengthWithSize;<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><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      final HFileBlockDecodingContext decodingCtx) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    return new BufferedEncodedSeeker&lt;FastDiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      private void decode(boolean isFirst) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        byte flag = currentBuffer.get();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          if (!isFirst) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>            System.arraycopy(current.keyBuffer,<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                current.keyLength - current.prevTimestampAndType.length,<a name="line.406"></a>
-<span class="sourceLineNo">407</span>                current.prevTimestampAndType, 0,<a name="line.407"></a>
-<span class="sourceLineNo">408</span>                current.prevTimestampAndType.length);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>        current.ensureSpaceForKey();<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>        if (isFirst) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // copy everything<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              current.keyLength - current.prevTimestampAndType.length);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              Bytes.SIZEOF_SHORT;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          current.familyLengthWithSize =<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              current.keyBuffer[current.rowLengthWithSize] + Bytes.SIZEOF_BYTE;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        } else if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // length of row is different, copy everything except family<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>          // copy the row size<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          int oldRowLengthWithSize = current.rowLengthWithSize;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.432"></a>
-<span class="sourceLineNo">433</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              Bytes.SIZEOF_SHORT;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // move the column family<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          System.arraycopy(current.keyBuffer, oldRowLengthWithSize,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              current.keyBuffer, current.rowLengthWithSize,<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              current.familyLengthWithSize);<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>          // copy the rest of row<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>          // copy the qualifier<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.447"></a>
-<span class="sourceLineNo">448</span>              + current.familyLengthWithSize, current.keyLength<a name="line.448"></a>
-<span class="sourceLineNo">449</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.449"></a>
-<span class="sourceLineNo">450</span>              - current.prevTimestampAndType.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          // We have to copy part of row and qualifier, but the column family<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          // is in the right place.<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // before column family (rest of row)<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // after column family (qualifier)<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.460"></a>
-<span class="sourceLineNo">461</span>              + current.familyLengthWithSize, current.keyLength<a name="line.461"></a>
-<span class="sourceLineNo">462</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              - current.prevTimestampAndType.length);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          // copy just the ending<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              current.keyLength - current.prevTimestampAndType.length<a name="line.467"></a>
-<span class="sourceLineNo">468</span>                  - current.lastCommonPrefix);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // timestamp<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        int pos = current.keyLength - current.prevTimestampAndType.length;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        int commonTimestampPrefix = (flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          SHIFT_TIMESTAMP_LENGTH;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          System.arraycopy(current.prevTimestampAndType, 0, current.keyBuffer,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>              pos, commonTimestampPrefix);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        pos += commonTimestampPrefix;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        currentBuffer.get(current.keyBuffer, pos,<a name="line.480"></a>
-<span class="sourceLineNo">481</span>            Bytes.SIZEOF_LONG - commonTimestampPrefix);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        pos += Bytes.SIZEOF_LONG - commonTimestampPrefix;<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>        // type<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          current.keyBuffer[pos] =<a name="line.488"></a>
-<span class="sourceLineNo">489</span>              current.prevTimestampAndType[Bytes.SIZEOF_LONG];<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>        // handle value<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        if ((flag &amp; FLAG_SAME_VALUE) == 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          current.valueOffset = currentBuffer.position();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          currentBuffer.skip(current.valueLength);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>        if (includesTags()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          decodeTags();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        if (includesMvcc()) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          current.memstoreTS = 0;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      protected void decodeFirst() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        decode(true);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      protected void decodeNext() {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        decode(false);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>      @Override<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      protected FastDiffSeekerState createSeekerState() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        return new FastDiffSeekerState(this.tmpPair, this.includesTags());<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      }<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>}<a name="line.526"></a>
+<span class="sourceLineNo">381</span>    public FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair,<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        boolean includeTags, boolean tagsCompressed) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      super(tmpPair, includeTags, tagsCompressed);<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>    @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    protected void copyFromNext(SeekerState that) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      super.copyFromNext(that);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      FastDiffSeekerState other = (FastDiffSeekerState) that;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      System.arraycopy(other.prevTimestampAndType, 0,<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          prevTimestampAndType, 0,<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          KeyValue.TIMESTAMP_TYPE_SIZE);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      familyLengthWithSize = other.familyLengthWithSize;<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>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      final HFileBlockDecodingContext decodingCtx) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new BufferedEncodedSeeker&lt;FastDiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      private void decode(boolean isFirst) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        byte flag = currentBuffer.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          if (!isFirst) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>            System.arraycopy(current.keyBuffer,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>                current.keyLength - current.prevTimestampAndType.length,<a name="line.407"></a>
+<span class="sourceLineNo">408</span>                current.prevTimestampAndType, 0,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>                current.prevTimestampAndType.length);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>        current.ensureSpaceForKey();<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>        if (isFirst) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // copy everything<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>              current.keyLength - current.prevTimestampAndType.length);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.424"></a>
+<span class="sourceLineNo">425</span>              Bytes.SIZEOF_SHORT;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          current.familyLengthWithSize =<a name="line.426"></a>
+<span class="sourceLineNo">427</span>              current.keyBuffer[current.rowLengthWithSize] + Bytes.SIZEOF_BYTE;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        } else if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // length of row is different, copy everything except family<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>          // copy the row size<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          int oldRowLengthWithSize = current.rowLengthWithSize;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.433"></a>
+<span class="sourceLineNo">434</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              Bytes.SIZEOF_SHORT;<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // move the column family<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          System.arraycopy(current.keyBuffer, oldRowLengthWithSize,<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              current.keyBuffer, current.rowLengthWithSize,<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              current.familyLengthWithSize);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>          // copy the rest of row<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>          // copy the qualifier<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              + current.familyLengthWithSize, current.keyLength<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.450"></a>
+<span class="sourceLineNo">451</span>              - current.prevTimestampAndType.length);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          // We have to copy part of row and qualifier, but the column family<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          // is in the right place.<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // before column family (rest of row)<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>          // after column family (qualifier)<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.461"></a>
+<span class="sourceLineNo">462</span>              + current.familyLengthWithSize, current.keyLength<a name="line.462"></a>
+<span class="sourceLineNo">463</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              - current.prevTimestampAndType.length);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        } else {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          // copy just the ending<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.467"></a>
+<span class="sourceLineNo">468</span>              current.keyLength - current.prevTimestampAndType.length<a name="line.468"></a>
+<span class="sourceLineNo">469</span>                  - current.lastCommonPrefix);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>        // timestamp<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        int pos = current.keyLength - current.prevTimestampAndType.length;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        int commonTimestampPrefix = (flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          SHIFT_TIMESTAMP_LENGTH;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          System.arraycopy(current.prevTimestampAndType, 0, current.keyBuffer,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>              pos, commonTimestampPrefix);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        pos += commonTimestampPrefix;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        currentBuffer.get(current.keyBuffer, pos,<a name="line.481"></a>
+<span class="sourceLineNo">482</span>            Bytes.SIZEOF_LONG - commonTimestampPrefix);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        pos += Bytes.SIZEOF_LONG - commonTimestampPrefix;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>        // type<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          current.keyBuffer[pos] =<a name="line.489"></a>
+<span class="sourceLineNo">490</span>              current.prevTimestampAndType[Bytes.SIZEOF_LONG];<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>        // handle value<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        if ((flag &amp; FLAG_SAME_VALUE) == 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          current.valueOffset = currentBuffer.position();<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          currentBuffer.skip(current.valueLength);<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>        if (includesTags()) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>          decodeTags();<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        if (includesMvcc()) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        } else {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>          current.memstoreTS = 0;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        current.nextKvOffset = currentBuffer.position();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>      @Override<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      protected void decodeFirst() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        decode(true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>      @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      protected void decodeNext() {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        decode(false);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      @Override<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      protected FastDiffSeekerState createSeekerState() {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        return new FastDiffSeekerState(this.tmpPair, this.includesTags(),<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            this.tagsCompressed());<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    };<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span>}<a name="line.528"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
index 81bd916..b58512b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html
@@ -386,152 +386,154 @@
 <span class="sourceLineNo">378</span>    private int rowLengthWithSize;<a name="line.378"></a>
 <span class="sourceLineNo">379</span>    private int familyLengthWithSize;<a name="line.379"></a>
 <span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    public FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      super(tmpPair, includeTags);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void copyFromNext(SeekerState that) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      super.copyFromNext(that);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      FastDiffSeekerState other = (FastDiffSeekerState) that;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      System.arraycopy(other.prevTimestampAndType, 0,<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          prevTimestampAndType, 0,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          KeyValue.TIMESTAMP_TYPE_SIZE);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      familyLengthWithSize = other.familyLengthWithSize;<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><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      final HFileBlockDecodingContext decodingCtx) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    return new BufferedEncodedSeeker&lt;FastDiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      private void decode(boolean isFirst) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        byte flag = currentBuffer.get();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          if (!isFirst) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>            System.arraycopy(current.keyBuffer,<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                current.keyLength - current.prevTimestampAndType.length,<a name="line.406"></a>
-<span class="sourceLineNo">407</span>                current.prevTimestampAndType, 0,<a name="line.407"></a>
-<span class="sourceLineNo">408</span>                current.prevTimestampAndType.length);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>        current.ensureSpaceForKey();<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>        if (isFirst) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // copy everything<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              current.keyLength - current.prevTimestampAndType.length);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              Bytes.SIZEOF_SHORT;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          current.familyLengthWithSize =<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              current.keyBuffer[current.rowLengthWithSize] + Bytes.SIZEOF_BYTE;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        } else if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // length of row is different, copy everything except family<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>          // copy the row size<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          int oldRowLengthWithSize = current.rowLengthWithSize;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.432"></a>
-<span class="sourceLineNo">433</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              Bytes.SIZEOF_SHORT;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // move the column family<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          System.arraycopy(current.keyBuffer, oldRowLengthWithSize,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              current.keyBuffer, current.rowLengthWithSize,<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              current.familyLengthWithSize);<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>          // copy the rest of row<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>          // copy the qualifier<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.447"></a>
-<span class="sourceLineNo">448</span>              + current.familyLengthWithSize, current.keyLength<a name="line.448"></a>
-<span class="sourceLineNo">449</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.449"></a>
-<span class="sourceLineNo">450</span>              - current.prevTimestampAndType.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          // We have to copy part of row and qualifier, but the column family<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          // is in the right place.<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // before column family (rest of row)<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // after column family (qualifier)<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.460"></a>
-<span class="sourceLineNo">461</span>              + current.familyLengthWithSize, current.keyLength<a name="line.461"></a>
-<span class="sourceLineNo">462</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              - current.prevTimestampAndType.length);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          // copy just the ending<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              current.keyLength - current.prevTimestampAndType.length<a name="line.467"></a>
-<span class="sourceLineNo">468</span>                  - current.lastCommonPrefix);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // timestamp<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        int pos = current.keyLength - current.prevTimestampAndType.length;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        int commonTimestampPrefix = (flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          SHIFT_TIMESTAMP_LENGTH;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          System.arraycopy(current.prevTimestampAndType, 0, current.keyBuffer,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>              pos, commonTimestampPrefix);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        pos += commonTimestampPrefix;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        currentBuffer.get(current.keyBuffer, pos,<a name="line.480"></a>
-<span class="sourceLineNo">481</span>            Bytes.SIZEOF_LONG - commonTimestampPrefix);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        pos += Bytes.SIZEOF_LONG - commonTimestampPrefix;<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>        // type<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          current.keyBuffer[pos] =<a name="line.488"></a>
-<span class="sourceLineNo">489</span>              current.prevTimestampAndType[Bytes.SIZEOF_LONG];<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>        // handle value<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        if ((flag &amp; FLAG_SAME_VALUE) == 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          current.valueOffset = currentBuffer.position();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          currentBuffer.skip(current.valueLength);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>        if (includesTags()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          decodeTags();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        if (includesMvcc()) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          current.memstoreTS = 0;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      protected void decodeFirst() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        decode(true);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      protected void decodeNext() {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        decode(false);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>      @Override<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      protected FastDiffSeekerState createSeekerState() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        return new FastDiffSeekerState(this.tmpPair, this.includesTags());<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      }<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>}<a name="line.526"></a>
+<span class="sourceLineNo">381</span>    public FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair,<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        boolean includeTags, boolean tagsCompressed) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      super(tmpPair, includeTags, tagsCompressed);<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>    @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    protected void copyFromNext(SeekerState that) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      super.copyFromNext(that);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      FastDiffSeekerState other = (FastDiffSeekerState) that;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      System.arraycopy(other.prevTimestampAndType, 0,<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          prevTimestampAndType, 0,<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          KeyValue.TIMESTAMP_TYPE_SIZE);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      familyLengthWithSize = other.familyLengthWithSize;<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>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      final HFileBlockDecodingContext decodingCtx) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new BufferedEncodedSeeker&lt;FastDiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      private void decode(boolean isFirst) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        byte flag = currentBuffer.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          if (!isFirst) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>            System.arraycopy(current.keyBuffer,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>                current.keyLength - current.prevTimestampAndType.length,<a name="line.407"></a>
+<span class="sourceLineNo">408</span>                current.prevTimestampAndType, 0,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>                current.prevTimestampAndType.length);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>        current.ensureSpaceForKey();<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>        if (isFirst) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // copy everything<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>              current.keyLength - current.prevTimestampAndType.length);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.424"></a>
+<span class="sourceLineNo">425</span>              Bytes.SIZEOF_SHORT;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          current.familyLengthWithSize =<a name="line.426"></a>
+<span class="sourceLineNo">427</span>              current.keyBuffer[current.rowLengthWithSize] + Bytes.SIZEOF_BYTE;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        } else if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // length of row is different, copy everything except family<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>          // copy the row size<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          int oldRowLengthWithSize = current.rowLengthWithSize;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.433"></a>
+<span class="sourceLineNo">434</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              Bytes.SIZEOF_SHORT;<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // move the column family<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          System.arraycopy(current.keyBuffer, oldRowLengthWithSize,<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              current.keyBuffer, current.rowLengthWithSize,<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              current.familyLengthWithSize);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>          // copy the rest of row<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>          // copy the qualifier<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              + current.familyLengthWithSize, current.keyLength<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.450"></a>
+<span class="sourceLineNo">451</span>              - current.prevTimestampAndType.length);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          // We have to copy part of row and qualifier, but the column family<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          // is in the right place.<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // before column family (rest of row)<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>          // after column family (qualifier)<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.461"></a>
+<span class="sourceLineNo">462</span>              + current.familyLengthWithSize, current.keyLength<a name="line.462"></a>
+<span class="sourceLineNo">463</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              - current.prevTimestampAndType.length);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        } else {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          // copy just the ending<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.467"></a>
+<span class="sourceLineNo">468</span>              current.keyLength - current.prevTimestampAndType.length<a name="line.468"></a>
+<span class="sourceLineNo">469</span>                  - current.lastCommonPrefix);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>        // timestamp<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        int pos = current.keyLength - current.prevTimestampAndType.length;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        int commonTimestampPrefix = (flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          SHIFT_TIMESTAMP_LENGTH;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          System.arraycopy(current.prevTimestampAndType, 0, current.keyBuffer,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>              pos, commonTimestampPrefix);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        pos += commonTimestampPrefix;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        currentBuffer.get(current.keyBuffer, pos,<a name="line.481"></a>
+<span class="sourceLineNo">482</span>            Bytes.SIZEOF_LONG - commonTimestampPrefix);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        pos += Bytes.SIZEOF_LONG - commonTimestampPrefix;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>        // type<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          current.keyBuffer[pos] =<a name="line.489"></a>
+<span class="sourceLineNo">490</span>              current.prevTimestampAndType[Bytes.SIZEOF_LONG];<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>        // handle value<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        if ((flag &amp; FLAG_SAME_VALUE) == 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          current.valueOffset = currentBuffer.position();<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          currentBuffer.skip(current.valueLength);<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>        if (includesTags()) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>          decodeTags();<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        if (includesMvcc()) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        } else {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>          current.memstoreTS = 0;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        current.nextKvOffset = currentBuffer.position();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>      @Override<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      protected void decodeFirst() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        decode(true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>      @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      protected void decodeNext() {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        decode(false);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      @Override<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      protected FastDiffSeekerState createSeekerState() {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        return new FastDiffSeekerState(this.tmpPair, this.includesTags(),<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            this.tagsCompressed());<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    };<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span>}<a name="line.528"></a>
 
 
 


[31/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html
deleted file mode 100644
index 6e5a8a2..0000000
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.regionserver.UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<script type="text/javascript"><!--
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)";
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
-<!--   -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html" target="_top">Frames</a></li>
-<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip-navbar_top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.UnexpectedStateException" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.UnexpectedStateException</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a> in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></h3>
-<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a> that throw <a href="../../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">AbstractMemStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#clearSnapshot(long)">clearSnapshot</a></strong>(long&nbsp;id)</code>
-<div class="block">The passed snapshot was successfully persisted; it can be let go.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">MemStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#clearSnapshot(long)">clearSnapshot</a></strong>(long&nbsp;id)</code>
-<div class="block">Clears the current snapshot of the Memstore.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
-<!--   -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/class-use/UnexpectedStateException.html" target="_top">Frames</a></li>
-<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip-navbar_bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
index 3cf2456..33827f0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
@@ -17,6 +17,7 @@
 <li><a href="FavoredNodesForRegion.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>FavoredNodesForRegion</i></a></li>
 <li><a href="FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>FlushRequester</i></a></li>
 <li><a href="FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>FlushRequestListener</i></a></li>
+<li><a href="HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>HeapMemoryManager.HeapMemoryTuneObserver</i></a></li>
 <li><a href="HeapMemoryTuner.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>HeapMemoryTuner</i></a></li>
 <li><a href="InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>InternalScanner</i></a></li>
 <li><a href="KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><i>KeyValueScanner</i></a></li>
@@ -284,7 +285,6 @@
 <li><a href="RegionServerRunningException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">RegionServerRunningException</a></li>
 <li><a href="RegionServerStoppedException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">RegionServerStoppedException</a></li>
 <li><a href="RowTooBigException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">RowTooBigException</a></li>
-<li><a href="UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">UnexpectedStateException</a></li>
 <li><a href="WrongRegionException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">WrongRegionException</a></li>
 </ul>
 </div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
index 58e20de..ab9c28b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
@@ -108,134 +108,140 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></td>
+<td class="colLast">
+<div class="block">Every class that wants to observe heap memory tune actions must implement this interface.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryTuner</a></td>
 <td class="colLast">
 <div class="block">Makes the decision regarding proper sizing of the heap memory.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a></td>
 <td class="colLast">
 <div class="block">Internal scanners differ from client-side scanners in that they operate on
  HStoreKeys and byte[] instead of RowResults.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></td>
 <td class="colLast">
 <div class="block">Scanner that returns the next KeyValue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></td>
 <td class="colLast">
 <div class="block">Last flushed sequence Ids for the regions and their stores on region server</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html" title="interface in org.apache.hadoop.hbase.regionserver">LeaseListener</a></td>
 <td class="colLast">
 <div class="block">LeaseListener is an interface meant to be implemented by users of the Leases
  class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a></td>
 <td class="colLast">
 <div class="block">The MemStore holds in-memory modifications to the Store.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a></td>
 <td class="colLast">
 <div class="block">A memstore-local allocation buffer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManagerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsHeapMemoryManagerSource</a></td>
 <td class="colLast">
 <div class="block">This interface will be implemented by a MetricsSource that will export metrics from
  HeapMemoryManager in RegionServer into the hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionAggregateSource</a></td>
 <td class="colLast">
 <div class="block">This interface will be implemented by a MetricsSource that will export metrics from
  multiple regions into the hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></td>
 <td class="colLast">
 <div class="block">Interface for classes that expose metrics about the regionserver.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactory.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSourceFactory</a></td>
 <td class="colLast">
 <div class="block">Interface of a factory to create Metrics Sources used inside of regionservers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></td>
 <td class="colLast">
 <div class="block">This is the interface that will expose RegionServer information to hadoop1/hadoop2
  implementations of the MetricsRegionServerSource.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionSource</a></td>
 <td class="colLast">
 <div class="block">This interface will be implemented to allow single regions to push metrics into
  MetricsRegionAggregateSource that will in turn push data to the Hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></td>
 <td class="colLast">
 <div class="block">Interface of class that will wrap an HRegion and export numbers so they can be
  used in MetricsRegionSource</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsTableAggregateSource</a></td>
 <td class="colLast">
 <div class="block">This interface will be implemented by a MetricsSource that will export metrics from
  multiple regions of a table into the hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsTableSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsTableSource</a></td>
 <td class="colLast">
 <div class="block">This interface will be implemented to allow region server to push table metrics into
  MetricsRegionAggregateSource that will in turn push data to the Hadoop metrics system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsTableWrapperAggregate</a></td>
 <td class="colLast">
 <div class="block">Interface of class that will wrap a MetricsTableSource and export numbers so they can be
  used in MetricsTableSource</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html" title="interface in org.apache.hadoop.hbase.regionserver">OnlineRegions</a></td>
 <td class="colLast">
 <div class="block">Interface to Map of online regions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></td>
 <td class="colLast">
 <div class="block">Regions store data for a certain region of a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.BulkLoadListener</a></td>
 <td class="colLast">
 <div class="block">Listener class to enable callers of
@@ -243,134 +249,134 @@
  pre/post processing of a given bulkload call</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.FlushResult</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a></td>
 <td class="colLast">
 <div class="block">Row lock held by a given thread.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionMergeTransaction</a></td>
 <td class="colLast">
 <div class="block">Executes region merge as a "transaction".</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.JournalEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionMergeTransaction.JournalEntry</a></td>
 <td class="colLast">
 <div class="block">Split transaction journal entry</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.TransactionListener.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionMergeTransaction.TransactionListener</a></td>
 <td class="colLast">
 <div class="block">Split transaction listener</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></td>
 <td class="colLast">
 <div class="block">RegionScanner describes iterators over rows in an HRegion.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></td>
 <td class="colLast">
 <div class="block">Services provided by <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionServer</code></a></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a></td>
 <td class="colLast">
 <div class="block">Gateway to Cluster Replication.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></td>
 <td class="colLast">
 <div class="block">A sink for a replication stream has to expose this service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a></td>
 <td class="colLast">
 <div class="block">A source for a replication stream has to expose this service.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;S extends com.google.protobuf.Message,T extends com.google.protobuf.Message&gt;</td>
 <td class="colLast">
 <div class="block">Defines the procedure to atomically perform multiple scans and mutations
  on a HRegion.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.html" title="interface in org.apache.hadoop.hbase.regionserver">RpcSchedulerFactory</a></td>
 <td class="colLast">
 <div class="block">A factory class that constructs an <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc"><code>RpcScheduler</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">SequenceId</a></td>
 <td class="colLast">
 <div class="block">Interface which abstracts implementations on log sequenceId assignment</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a></td>
 <td class="colLast">
 <div class="block">This interface denotes a scanner as one which can ship cells.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.html" title="interface in org.apache.hadoop.hbase.regionserver">SplitLogWorker.TaskExecutor</a></td>
 <td class="colLast">
 <div class="block">Objects implementing this interface actually do the task that has been
  acquired by a <a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><code>SplitLogWorker</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.html" title="interface in org.apache.hadoop.hbase.regionserver">SplitTransaction</a></td>
 <td class="colLast">
 <div class="block">Executes region split as a "transaction".</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.JournalEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">SplitTransaction.JournalEntry</a></td>
 <td class="colLast">
 <div class="block">Split transaction journal entry</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.TransactionListener.html" title="interface in org.apache.hadoop.hbase.regionserver">SplitTransaction.TransactionListener</a></td>
 <td class="colLast">
 <div class="block">Split transaction listener</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></td>
 <td class="colLast">
 <div class="block">Interface for objects that hold a column family in a Region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreConfigInformation</a></td>
 <td class="colLast">
 <div class="block">A more restricted interface for HStore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileManager.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFileManager</a></td>
 <td class="colLast">
 <div class="block">Manages the store files and basic metadata about that that determines the logical structure
  (e.g.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a></td>
 <td class="colLast">
 <div class="block">A package protected interface for a store flushing.</div>
@@ -804,7 +810,7 @@
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></td>
 <td class="colLast">
-<div class="block">A pool of <code>HeapMemStoreLAB.Chunk</code> instances.</div>
+<div class="block">A pool of <a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -1649,10 +1655,6 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/WrongRegionException.html" title="class in org.apache.hadoop.hbase.regionserver">WrongRegionException</a></td>
 <td class="colLast">
 <div class="block">Thrown when a request contains a key which is not part of this region</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 a05db76..46b4b06 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -285,7 +285,7 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactionTool.CompactionMapper.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">CompactionTool.CompactionMapper</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreChunkPool</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreChunkPool</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreCompactor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactorIterator.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreCompactorIterator</span></a> (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;E&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreFlusher</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>)</li>
@@ -498,7 +498,6 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">NoSuchColumnFamilyException</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">UnexpectedStateException</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.LeaseStillHeldException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Leases.LeaseStillHeldException</span></a></li>
@@ -593,6 +592,7 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushRequester</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushRequestListener</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">HeapMemoryManager.HeapMemoryTuneObserver</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io"><span class="strong">HeapSize</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStore</span></a></li>
@@ -663,23 +663,23 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</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="strong">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreCompactor.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.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="strong">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ImmutableSegment.Type</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="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</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="strong">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionOpeningState</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="strong">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">StoreScanner.StoreScannerCompactionRace</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="strong">DefaultHeapMemoryTuner.StepDirection</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="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</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="strong">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</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="strong">ScannerContext.NextState</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="strong">DefaultHeapMemoryTuner.StepDirection</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="strong">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreCompactor.Type</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="strong">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ImmutableSegment.Type</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="strong">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">StoreScanner.StoreScannerCompactionRace</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="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>


[15/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
index 32277da..2b5c301 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
@@ -43,2833 +43,2836 @@
 <span class="sourceLineNo">035</span>import java.util.Collection;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.Collections;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import java.util.Comparator;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Iterator;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.Map;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Map.Entry;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.Set;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CountDownLatch;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.TimeUnit;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.regex.Pattern;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>import javax.servlet.ServletException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import javax.servlet.http.HttpServlet;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import javax.servlet.http.HttpServletRequest;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import javax.servlet.http.HttpServletResponse;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.commons.logging.Log;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.commons.logging.LogFactory;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.conf.Configuration;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CoordinatedStateException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HConstants;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ProcedureInfo;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.RegionStateListener;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerLoad;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Result;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.coprocessor.BypassCoprocessorException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationMetaCleaner;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationZKLockCleanerChore;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.procedure.DeleteColumnFamilyProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.procedure.DispatchMergingRegionsProcedure;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.ProcedureEvent;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.procedure.ModifyColumnFamilyProcedure;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.replication.ReplicationQueuesZKImpl;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.replication.master.TableCFsUpdater;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.replication.regionserver.Replication;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.util.ZKDataMigrator;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.zookeeper.DrainingServerTracker;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.zookeeper.MasterMaintenanceModeTracker;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.zookeeper.RegionServerTracker;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.zookeeper.KeeperException;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.mortbay.jetty.Connector;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.mortbay.jetty.nio.SelectChannelConnector;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.mortbay.jetty.servlet.Context;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * run the cluster.  All others park themselves in their constructor until<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> *<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> *<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> *<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @see org.apache.zookeeper.Watcher<a name="line.191"></a>
-<span class="sourceLineNo">192</span> */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@SuppressWarnings("deprecation")<a name="line.194"></a>
-<span class="sourceLineNo">195</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  private static final Log LOG = LogFactory.getLog(HMaster.class.getName());<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static class InitializationMonitor extends HasThread {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * true, do nothing otherwise.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public static final boolean HALT_DEFAULT = false;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private final HMaster master;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private final long timeout;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private final boolean haltOnTimeout;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    InitializationMonitor(HMaster master) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      super("MasterInitializationMonitor");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      this.master = master;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      this.setDaemon(true);<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>    @Override<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    public void run() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          Thread.sleep(timeout);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          if (master.isInitialized()) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            if (haltOnTimeout) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  //instance into web context.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public static final String MASTER = "master";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  // Manager and zk listener for master election<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private final ActiveMasterManager activeMasterManager;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  // Region server tracker<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  RegionServerTracker regionServerTracker;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  // Draining region server tracker<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private DrainingServerTracker drainingServerTracker;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  // Tracker for load balancer state<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  // Tracker for split and merge state<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  // Tracker for region normalizer state<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  //Tracker for master maintenance mode setting<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private ClusterSchemaService clusterSchemaService;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  // Metrics for the HMaster<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  final MetricsMaster metricsMaster;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // file system manager for the master FS operations<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private MasterFileSystem fileSystemManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  private MasterWalManager walManager;<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // server manager to deal with region server info<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private volatile ServerManager serverManager;<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // manager of assignment nodes in zookeeper<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private AssignmentManager assignmentManager;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  // buffer for "fatal error" notices from region servers<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  // in the cluster. This is only used for assisting<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // operations/debugging.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // flag set after we become the active master (used for testing)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private volatile boolean isActiveMaster = false;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  // flag set after we complete initialization once active,<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  // it is not private since it's used in unit tests<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  // flag set after master services are started,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  // initialization may have not completed yet.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  volatile boolean serviceStarted = false;<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  // flag set after we complete assignMeta.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private final ProcedureEvent serverCrashProcessingEnabled =<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    new ProcedureEvent("server crash processing");<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  private LoadBalancer balancer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  private RegionNormalizer normalizer;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private BalancerChore balancerChore;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private RegionNormalizerChore normalizerChore;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private ClusterStatusChore clusterStatusChore;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private PeriodicDoMetrics periodicDoMetricsChore = null;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  CatalogJanitor catalogJanitorChore;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private ReplicationZKLockCleanerChore replicationZKLockCleanerChore;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  private ReplicationMetaCleaner replicationMetaCleaner;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private LogCleaner logCleaner;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private HFileCleaner hfileCleaner;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private MobCompactionChore mobCompactChore;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // used to synchronize the mobCompactionStates<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  // save the information of mob compactions in tables.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  MasterCoprocessorHost cpHost;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private final boolean preLoadTableDescriptors;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Time stamps for when a hmaster became active<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private long masterActiveTime;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final boolean masterCheckCompression;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  //should we check encryption settings at master side, default true<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private final boolean masterCheckEncryption;<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // monitor for snapshot of hbase tables<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  SnapshotManager snapshotManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // monitor for distributed procedures<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private MasterProcedureManagerHost mpmHost;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private volatile MasterQuotaManager quotaManager;<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private WALProcedureStore procedureStore;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // handle table states<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private TableStateManager tableStateManager;<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private long splitPlanCount;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  private long mergePlanCount;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  /** flag used in test cases in order to simulate RS failures during master initialization */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private volatile boolean initializationBeforeMetaAssignment = false;<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private org.mortbay.jetty.Server masterJettyServer;<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static class RedirectServlet extends HttpServlet {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    private static final long serialVersionUID = 2894774810058302472L;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    private static int regionServerInfoPort;<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public void doGet(HttpServletRequest request,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      String redirectUrl = request.getScheme() + "://"<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        + request.getServerName() + ":" + regionServerInfoPort<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        + request.getRequestURI();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      response.sendRedirect(redirectUrl);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private static class PeriodicDoMetrics extends ScheduledChore {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private final HMaster server;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    public PeriodicDoMetrics(int doMetricsInterval, final HMaster server) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      super(server.getServerName() + "-DoMetricsChore", server, doMetricsInterval);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      this.server = server;<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>    @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    protected void chore() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      server.doMetrics();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Initializes the HMaster. The steps are as follows:<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * &lt;p&gt;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;ol&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * &lt;li&gt;Initialize the local HRegionServer<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;li&gt;Start the ActiveMasterManager.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;/ol&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * &lt;p&gt;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Remaining steps of initialization occur in<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * the master becomes the active one.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public HMaster(final Configuration conf, CoordinatedStateManager csm)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      throws IOException, KeeperException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    super(conf, csm);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      conf.getLong("hbase.master.buffer.for.rs.fatals", 1*1024*1024));<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    LOG.info("hbase.rootdir=" + FSUtils.getRootDir(this.conf) +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Disable usage of meta replicas in the master<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    Replication.decorateMasterConfiguration(this.conf);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // Hack! Maps DFSClient =&gt; Master for logs.  HDFS made this<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    // config param for task trackers, but we can piggyback off of it.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // should we check encryption settings at master side, default true<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // preload table descriptor at startup<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // Do we publish the status?<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Class&lt;? extends ClusterStatusPublisher.Publisher&gt; publisherClass =<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            ClusterStatusPublisher.Publisher.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (shouldPublish) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (publisherClass == null) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.448"></a>
-<span class="sourceLineNo">449</span>            " is not set - not publishing status");<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      } else {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        getChoreService().scheduleChore(clusterStatusPublisherChore);<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><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      setInitLatch(new CountDownLatch(1));<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      int infoPort = putUpJettyServer();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      startActiveMasterManager(infoPort);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      activeMasterManager = 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><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // return the actual infoPort, -1 means disable info server.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private int putUpJettyServer() throws IOException {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return -1;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    // -1 is for disabling info server, so no redirecting<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    if (infoPort &lt; 0 || infoServer == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      return -1;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String msg =<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          "Failed to start redirecting jetty server. Address " + addr<a name="line.481"></a>
-<span class="sourceLineNo">482</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.482"></a>
-<span class="sourceLineNo">483</span>              + "hbase.master.info.bindAddress";<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      LOG.error(msg);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new IOException(msg);<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>    RedirectServlet.regionServerInfoPort = infoServer.getPort();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if(RedirectServlet.regionServerInfoPort == infoPort) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      return infoPort;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    masterJettyServer = new org.mortbay.jetty.Server();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    Connector connector = new SelectChannelConnector();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    connector.setHost(addr);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    connector.setPort(infoPort);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    masterJettyServer.addConnector(connector);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    masterJettyServer.setStopAtShutdown(true);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Context context = new Context(masterJettyServer, "/", Context.NO_SESSIONS);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    context.addServlet(RedirectServlet.class, "/*");<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    try {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      masterJettyServer.start();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    } catch (Exception e) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      throw new IOException("Failed to start redirecting jetty server", e);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return connector.getLocalPort();<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>  @Override<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    return super.getFsTableDescriptors();<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>  /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * For compatibility, if failed with regionserver credentials, try the master one<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   */<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    try {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      super.login(user, host);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    } catch (IOException ie) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      user.login("hbase.master.keytab.file",<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        "hbase.master.kerberos.principal", host);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<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>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * If configured to put regions on active master,<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * wait till a backup master becomes active.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * Otherwise, loop till the server is stopped or aborted.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   */<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  @Override<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  protected void waitForMasterActive(){<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    boolean tablesOnMaster = BaseLoadBalancer.tablesOnMaster(conf);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    while (!(tablesOnMaster &amp;&amp; isActiveMaster)<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        &amp;&amp; !isStopped() &amp;&amp; !isAborted()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      sleeper.sleep();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public MasterRpcServices getMasterRpcServices() {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return (MasterRpcServices)rpcServices;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  protected String getProcessName() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    return MASTER;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  protected boolean canCreateBaseZNode() {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return true;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  @Override<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  protected boolean canUpdateTableDescriptor() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return true;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return new MasterRpcServices(this);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  protected void configureInfoServer() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    infoServer.setAttribute(MASTER, this);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      super.configureInfoServer();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return MasterDumpServlet.class;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * Emit the HMaster metrics, such as region in transition metrics.<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * Surrounding in a try block just to be sure metrics doesn't abort HMaster.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void doMetrics() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      if (assignmentManager != null) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        assignmentManager.updateRegionsInTransitionMetrics();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    } catch (Throwable e) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      LOG.error("Couldn't update metrics: " + e.getMessage());<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>  MetricsMaster getMasterMetrics() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return metricsMaster;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Initialize all ZK based system trackers.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  void initializeZKBasedSystemTrackers() throws IOException,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      InterruptedException, KeeperException, CoordinatedStateException {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    this.normalizer = RegionNormalizerFactory.getRegionNormalizer(conf);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.normalizer.setMasterServices(this);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    this.normalizer.setMasterRpcServices((MasterRpcServices)rpcServices);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    this.loadBalancerTracker.start();<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    this.regionNormalizerTracker = new RegionNormalizerTracker(zooKeeper, this);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    this.regionNormalizerTracker.start();<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    this.splitOrMergeTracker.start();<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.assignmentManager = new AssignmentManager(this, serverManager,<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      this.balancer, this.service, this.metricsMaster,<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      this.tableLockManager, tableStateManager);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    this.regionServerTracker.start();<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.drainingServerTracker.start();<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    this.maintenanceModeTracker = new MasterMaintenanceModeTracker(zooKeeper);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    this.maintenanceModeTracker.start();<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // going ahead with their startup.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    LOG.info("Server active/primary master=" + this.serverName +<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        ", sessionid=0x" +<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    this.snapshotManager = new SnapshotManager();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    this.mpmHost.register(this.snapshotManager);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    this.mpmHost.loadProcedures(conf);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    this.mpmHost.initialize(this, this.metricsMaster);<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><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;ol&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * &lt;li&gt;Initialize master components - file system manager, server manager,<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   *     assignment manager, region server tracker, etc&lt;/li&gt;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior,<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *     executor services, etc&lt;/li&gt;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;li&gt;Set cluster as UP in ZooKeeper&lt;/li&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;li&gt;Wait for RegionServers to check-in&lt;/li&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * &lt;li&gt;Split logs and perform data recovery, if necessary&lt;/li&gt;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * &lt;li&gt;Ensure assignment of meta/namespace regions&lt;li&gt;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * &lt;li&gt;Handle either fresh cluster start or master failover&lt;/li&gt;<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * &lt;/ol&gt;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  private void finishActiveMasterInitialization(MonitoredTask status)<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      throws IOException, InterruptedException, KeeperException, CoordinatedStateException {<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    isActiveMaster = true;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this));<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    zombieDetector.start();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    /*<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * We are active master now... go initialize components we need to run.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * Note, there may be dross in zk from previous runs; it'll get addressed<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     * below after we determine if cluster startup or failover.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     */<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    status.setStatus("Initializing Master file system");<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    this.fileSystemManager = new MasterFileSystem(this);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    this.walManager = new MasterWalManager(this);<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>    // enable table descriptors cache<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    this.tableDescriptors.setCacheOn();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    // set the META's descriptor to the correct replication<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    this.tableDescriptors.get(TableName.META_TABLE_NAME).setRegionReplication(<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    // warm-up HTDs cache on master initialization<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (preLoadTableDescriptors) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      status.setStatus("Pre-loading table descriptors");<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      this.tableDescriptors.getAll();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>    // publish cluster ID<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    status.setStatus("Publishing Cluster ID in ZooKeeper");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    this.initLatch.countDown();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    this.serverManager = createServerManager(this);<a name="line.703"></a>
-<span class="sourceLineNo">704</span><a name="line.704"></a>
-<span class="sourceLineNo">705</span>    // Invalidate all write locks held previously<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    this.tableLockManager.reapWriteLocks();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.tableStateManager = new TableStateManager(this);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    status.setStatus("Initializing ZK system trackers");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    initializeZKBasedSystemTrackers();<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    // This is for backwards compatibility<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    // See HBASE-11393<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    TableCFsUpdater tableCFsUpdater = new TableCFsUpdater(zooKeeper,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            conf, this.clusterConnection);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    tableCFsUpdater.update();<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    // initialize master side coprocessors before we start handling requests<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    status.setStatus("Initializing master coprocessors");<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    // start up all service threads.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    status.setStatus("Initializing master service threads");<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    startServiceThreads();<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // Wake up this server to check in<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    sleeper.skipSleepCycle();<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Wait for region servers to report in<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    status.setStatus("Wait for region servers to report in");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    waitForRegionServers(status);<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // get a list for previously failed RS which need log splitting work<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // we recover hbase:meta region servers inside master initialization and<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // handle other failed servers in SSH in order to start up master node ASAP<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap(this, status);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    metaBootstrap.splitMetaLogsBeforeAssignment();<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.initializationBeforeMetaAssignment = true;<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>    // Wait for regionserver to finish initialization.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      waitForServerOnline();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>    //initialize load balancer<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    this.balancer.setMasterServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    this.balancer.initialize();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>    // Check if master is shutting down because of some issue<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    // in initializing the regionserver or the balancer.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    if (isStopped()) return;<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    // Make sure meta assigned before proceeding.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    status.setStatus("Assigning Meta Region");<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    metaBootstrap.assignMeta();<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    // check if master is shutting down because above assignMeta could return even hbase:meta isn't<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    // assigned when master is shutting down<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (isStopped()) return;<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>    // migrating existent table state from zk, so splitters<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    // and recovery process treat states properly.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        .queryForTableStates(getZooKeeper()).entrySet()) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      LOG.info("Converting state from zk to new states:" + entry);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      tableStateManager.setTableState(entry.getKey(), entry.getValue());<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    ZKUtil.deleteChildrenRecursively(getZooKeeper(), getZooKeeper().tableZNode);<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>    status.setStatus("Submitting log splitting work for previously failed region servers");<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    metaBootstrap.processDeadServers();<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Fix up assignment manager status<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    status.setStatus("Starting assignment manager");<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    this.assignmentManager.joinCluster();<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>    // set cluster status again after user regions are assigned<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    this.balancerChore = new BalancerChore(this);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    getChoreService().scheduleChore(balancerChore);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    this.catalogJanitorChore = new CatalogJanitor(this, this);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>    // Do Metrics periodically<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    periodicDoMetricsChore = new PeriodicDoMetrics(msgInterval, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    getChoreService().scheduleChore(periodicDoMetricsChore);<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span>    status.setStatus("Starting cluster schema service");<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    initClusterSchemaService();<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>    if (this.cpHost != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        this.cpHost.preMasterInitialization();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      } catch (IOException e) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      }<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>    status.markComplete("Initialization successful");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    LOG.info("Master has completed initialization");<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    configurationManager.registerObserver(this.balancer);<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // Set master as 'initialized'.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    setInitialized(true);<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>    status.setStatus("Assign meta replicas");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    metaBootstrap.assignMetaReplicas();<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>    status.setStatus("Starting quota manager");<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    initQuotaManager();<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    // master initialization. See HBASE-5916.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    status.setStatus("Checking ZNode ACLs");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    initMobCleaner();<a name="line.832"></a>
-<span class="sourceLineNo">833</span><a name="line.833"></a>
-<span class="sourceLineNo">834</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    if (this.cpHost != null) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      // don't let cp initialization errors kill the master<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        this.cpHost.postStartMaster();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      } catch (IOException ioe) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>    zombieDetector.interrupt();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
-<span class="sourceLineNo">846</span><a name="line.846"></a>
-<span class="sourceLineNo">847</span>  private void initMobCleaner() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    } else {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      LOG<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>  /**<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   */<a name="line.865"></a>
-<span class="sourceLineNo">866</span>  MasterMetaBootstrap createMetaBootstrap(final HMaster master, final MonitoredTask status) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    return new MasterMetaBootstrap(master, status);<a name="line.869"></a>
-<span class="sourceLineNo">870</span>  }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>  /**<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * Create a {@link ServerManager} instance.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   */<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    // w/ a mocked up ServerManager.<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    setupClusterConnection();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    return new ServerManager(master);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
-<span class="sourceLineNo">881</span><a name="line.881"></a>
-<span class="sourceLineNo">882</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      throws IOException, InterruptedException {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    this.serverManager.waitForRegionServers(status);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Check zk for region servers that are up but didn't register<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServerName sn: this.regionServerTracker.getOnlineServers()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      // The isServerOnline check is opportunistic, correctness is handled inside<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      if (!this.serverManager.isServerOnline(sn)<a name="line.888"></a>
-<span class="sourceLineNo">889</span>          &amp;&amp; serverManager.checkAndRecordNewServer(sn, ServerLoad.EMPTY_SERVERLOAD)) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        LOG.info("Registered server found up in zk but who has not yet reported in: " + sn);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>  }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>  void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.clusterSchemaService.startAndWait();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (!this.clusterSchemaService.isRunning()) throw new HBaseIOException("Failed start");<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo"

<TRUNCATED>

[12/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
index bf30889..bf4df84 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
@@ -31,30 +31,37 @@
 <span class="sourceLineNo">023</span>import com.google.common.base.Predicate;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import com.google.common.collect.Iterables;<a name="line.24"></a>
 <span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Base class for file cleaners which allows subclasses to implement a simple<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * isFileDeletable method (which used to be the FileCleanerDelegate contract).<a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>public abstract class BaseFileCleanerDelegate extends BaseConfigurable<a name="line.30"></a>
-<span class="sourceLineNo">031</span>implements FileCleanerDelegate {<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>  @Override<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  public Iterable&lt;FileStatus&gt; getDeletableFiles(Iterable&lt;FileStatus&gt; files) {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    return Iterables.filter(files, new Predicate&lt;FileStatus&gt;() {<a name="line.35"></a>
-<span class="sourceLineNo">036</span>      @Override<a name="line.36"></a>
-<span class="sourceLineNo">037</span>      public boolean apply(FileStatus file) {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>        return isFileDeletable(file);<a name="line.38"></a>
-<span class="sourceLineNo">039</span>      }});<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  }<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   * Should the master delete the file or keep it?<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   * @param fStat file status of the file to check<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is deletable, &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  protected abstract boolean isFileDeletable(FileStatus fStat);<a name="line.47"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Base class for file cleaners which allows subclasses to implement a simple<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * isFileDeletable method (which used to be the FileCleanerDelegate contract).<a name="line.30"></a>
+<span class="sourceLineNo">031</span> */<a name="line.31"></a>
+<span class="sourceLineNo">032</span>public abstract class BaseFileCleanerDelegate extends BaseConfigurable<a name="line.32"></a>
+<span class="sourceLineNo">033</span>implements FileCleanerDelegate {<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  @Override<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  public Iterable&lt;FileStatus&gt; getDeletableFiles(Iterable&lt;FileStatus&gt; files) {<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    return Iterables.filter(files, new Predicate&lt;FileStatus&gt;() {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>      @Override<a name="line.38"></a>
+<span class="sourceLineNo">039</span>      public boolean apply(FileStatus file) {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>        return isFileDeletable(file);<a name="line.40"></a>
+<span class="sourceLineNo">041</span>      }});<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  }<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  @Override<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  public void init(Map&lt;String, Object&gt; params) {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    // subclass could override it if needed.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
 <span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>}<a name="line.49"></a>
+<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * Should the master delete the file or keep it?<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * @param fStat file status of the file to check<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is deletable, &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  protected abstract boolean isFileDeletable(FileStatus fStat);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>}<a name="line.56"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
index 18846d0..8b149ba 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
@@ -25,10 +25,10 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.cleaner;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.LinkedList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">020</span>import com.google.common.annotations.VisibleForTesting;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import com.google.common.collect.ImmutableSet;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import com.google.common.collect.Iterables;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import com.google.common.collect.Lists;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import org.apache.commons.logging.Log;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.commons.logging.LogFactory;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
@@ -40,10 +40,10 @@
 <span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.33"></a>
 <span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import com.google.common.annotations.VisibleForTesting;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import com.google.common.collect.ImmutableSet;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import com.google.common.collect.Iterables;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import com.google.common.collect.Lists;<a name="line.38"></a>
+<span class="sourceLineNo">035</span>import java.io.IOException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.LinkedList;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
 <span class="sourceLineNo">039</span><a name="line.39"></a>
 <span class="sourceLineNo">040</span>/**<a name="line.40"></a>
 <span class="sourceLineNo">041</span> * Abstract Cleaner that uses a chain of delegates to clean a directory of files<a name="line.41"></a>
@@ -57,240 +57,249 @@
 <span class="sourceLineNo">049</span>  private final Path oldFileDir;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private final Configuration conf;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  protected List&lt;T&gt; cleanersChain;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * @param name name of the chore being run<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * @param sleepPeriod the period of time to sleep between each run<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * @param s the stopper<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * @param conf configuration to use<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * @param fs handle to the FS<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * @param oldFileDir the path to the archived files<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @param confKey configuration key for the classes to instantiate<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public CleanerChore(String name, final int sleepPeriod, final Stoppable s, Configuration conf,<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      FileSystem fs, Path oldFileDir, String confKey) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    super(name, s, sleepPeriod);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    this.fs = fs;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this.oldFileDir = oldFileDir;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.conf = conf;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    initCleanerChain(confKey);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * Validate the file to see if it even belongs in the directory. If it is valid, then the file<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * will go through the cleaner delegates, but otherwise the file is just deleted.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * @param file full {@link Path} of the file to be checked<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is valid, &lt;tt&gt;false&lt;/tt&gt; otherwise<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected abstract boolean validate(Path file);<a name="line.78"></a>
+<span class="sourceLineNo">052</span>  protected Map&lt;String, Object&gt; params;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public CleanerChore(String name, final int sleepPeriod, final Stoppable s, Configuration conf,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>                      FileSystem fs, Path oldFileDir, String confKey) {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    this(name, sleepPeriod, s, conf, fs, oldFileDir, confKey, null);<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * @param name name of the chore being run<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param sleepPeriod the period of time to sleep between each run<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param s the stopper<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param conf configuration to use<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @param fs handle to the FS<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * @param oldFileDir the path to the archived files<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * @param confKey configuration key for the classes to instantiate<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * @param params members could be used in cleaner<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public CleanerChore(String name, final int sleepPeriod, final Stoppable s, Configuration conf,<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      FileSystem fs, Path oldFileDir, String confKey, Map&lt;String, Object&gt; params) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    super(name, s, sleepPeriod);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    this.fs = fs;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    this.oldFileDir = oldFileDir;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.conf = conf;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.params = params;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    initCleanerChain(confKey);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
 <span class="sourceLineNo">079</span><a name="line.79"></a>
 <span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Instantiate and initialize all the file cleaners set in the configuration<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param confKey key to get the file cleaner classes from the configuration<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private void initCleanerChain(String confKey) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.cleanersChain = new LinkedList&lt;T&gt;();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    String[] logCleaners = conf.getStrings(confKey);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    if (logCleaners != null) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      for (String className : logCleaners) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        T logCleaner = newFileCleaner(className, conf);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        if (logCleaner != null) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>          LOG.debug("initialize cleaner=" + className);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>          this.cleanersChain.add(logCleaner);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * A utility method to create new instances of LogCleanerDelegate based on the class name of the<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * LogCleanerDelegate.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * @param className fully qualified class name of the LogCleanerDelegate<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param conf<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @return the new instance<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private T newFileCleaner(String className, Configuration conf) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    try {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      Class&lt;? extends FileCleanerDelegate&gt; c = Class.forName(className).asSubclass(<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        FileCleanerDelegate.class);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      @SuppressWarnings("unchecked")<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      T cleaner = (T) c.newInstance();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      cleaner.setConf(conf);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      return cleaner;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    } catch (Exception e) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      LOG.warn("Can NOT create CleanerDelegate: " + className, e);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      // skipping if can't instantiate<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      return null;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<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>  @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  protected void chore() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    try {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      FileStatus[] files = FSUtils.listStatus(this.fs, this.oldFileDir);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      checkAndDeleteEntries(files);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    } catch (IOException e) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      e = e instanceof RemoteException ?<a name="line.126"></a>
-<span class="sourceLineNo">127</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      LOG.warn("Error while cleaning the logs", e);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Loop over the given directory entries, and check whether they can be deleted.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * If an entry is itself a directory it will be recursively checked and deleted itself iff<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * all subentries are deleted (and no new subentries are added in the mean time)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param entries directory entries to check<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return true if all entries were successfully deleted<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private boolean checkAndDeleteEntries(FileStatus[] entries) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (entries == null) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return true;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    boolean allEntriesDeleted = true;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    List&lt;FileStatus&gt; files = Lists.newArrayListWithCapacity(entries.length);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    for (FileStatus child : entries) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      Path path = child.getPath();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      if (child.isDirectory()) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // for each subdirectory delete it and all entries if possible<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        if (!checkAndDeleteDirectory(path)) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          allEntriesDeleted = false;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      } else {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // collect all files to attempt to delete in one batch<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        files.add(child);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    if (!checkAndDeleteFiles(files)) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      allEntriesDeleted = false;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    return allEntriesDeleted;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  <a name="line.163"></a>
-<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Attempt to delete a directory and all files under that directory. Each child file is passed<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * through the delegates to see if it can be deleted. If the directory has no children when the<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * cleaners have finished it is deleted.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * &lt;p&gt;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * If new children files are added between checks of the directory, the directory will &lt;b&gt;not&lt;/b&gt;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * be deleted.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @param dir directory to check<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the directory was deleted, &lt;tt&gt;false&lt;/tt&gt; otherwise.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @VisibleForTesting boolean checkAndDeleteDirectory(Path dir) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    if (LOG.isTraceEnabled()) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      LOG.trace("Checking directory: " + dir);<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>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileStatus[] children = FSUtils.listStatus(fs, dir);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      boolean allChildrenDeleted = checkAndDeleteEntries(children);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  <a name="line.182"></a>
-<span class="sourceLineNo">183</span>      // if the directory still has children, we can't delete it, so we are done<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (!allChildrenDeleted) return false;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    } catch (IOException e) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      e = e instanceof RemoteException ?<a name="line.186"></a>
-<span class="sourceLineNo">187</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      LOG.warn("Error while listing directory: " + dir, e);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // couldn't list directory, so don't try to delete, and don't return success<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return false;<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>    // otherwise, all the children (that we know about) have been deleted, so we should try to<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // delete this directory. However, don't do so recursively so we don't delete files that have<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // been added since we last checked.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    try {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      return fs.delete(dir, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    } catch (IOException e) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      if (LOG.isTraceEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        LOG.trace("Couldn't delete directory: " + dir, e);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // couldn't delete w/o exception, so we can't return success.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      return false;<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><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Run the given files through each of the cleaners to see if it should be deleted, deleting it if<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * necessary.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * @param files List of FileStatus for the files to check (and possibly delete)<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * @return true iff successfully deleted all files<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private boolean checkAndDeleteFiles(List&lt;FileStatus&gt; files) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // first check to see if the path is valid<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    List&lt;FileStatus&gt; validFiles = Lists.newArrayListWithCapacity(files.size());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    List&lt;FileStatus&gt; invalidFiles = Lists.newArrayList();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    for (FileStatus file : files) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      if (validate(file.getPath())) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        validFiles.add(file);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      } else {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LOG.warn("Found a wrongly formatted file: " + file.getPath() + " - will delete it.");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        invalidFiles.add(file);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>    Iterable&lt;FileStatus&gt; deletableValidFiles = validFiles;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    // check each of the cleaners for the valid files<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    for (T cleaner : cleanersChain) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      if (cleaner.isStopped() || this.getStopper().isStopped()) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        LOG.warn("A file cleaner" + this.getName() + " is stopped, won't delete any more files in:"<a name="line.230"></a>
-<span class="sourceLineNo">231</span>            + this.oldFileDir);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return false;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">081</span>   * Validate the file to see if it even belongs in the directory. If it is valid, then the file<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * will go through the cleaner delegates, but otherwise the file is just deleted.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param file full {@link Path} of the file to be checked<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is valid, &lt;tt&gt;false&lt;/tt&gt; otherwise<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected abstract boolean validate(Path file);<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Instantiate and initialize all the file cleaners set in the configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param confKey key to get the file cleaner classes from the configuration<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private void initCleanerChain(String confKey) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    this.cleanersChain = new LinkedList&lt;T&gt;();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    String[] logCleaners = conf.getStrings(confKey);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    if (logCleaners != null) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      for (String className : logCleaners) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        T logCleaner = newFileCleaner(className, conf);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        if (logCleaner != null) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          LOG.debug("initialize cleaner=" + className);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          this.cleanersChain.add(logCleaner);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        }<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>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /**<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * A utility method to create new instances of LogCleanerDelegate based on the class name of the<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * LogCleanerDelegate.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param className fully qualified class name of the LogCleanerDelegate<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * @param conf<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return the new instance<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  private T newFileCleaner(String className, Configuration conf) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    try {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      Class&lt;? extends FileCleanerDelegate&gt; c = Class.forName(className).asSubclass(<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        FileCleanerDelegate.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      @SuppressWarnings("unchecked")<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      T cleaner = (T) c.newInstance();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      cleaner.setConf(conf);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      cleaner.init(this.params);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return cleaner;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    } catch (Exception e) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      LOG.warn("Can NOT create CleanerDelegate: " + className, e);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      // skipping if can't instantiate<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return null;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<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>  @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  protected void chore() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    try {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      FileStatus[] files = FSUtils.listStatus(this.fs, this.oldFileDir);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      checkAndDeleteEntries(files);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    } catch (IOException e) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      e = e instanceof RemoteException ?<a name="line.135"></a>
+<span class="sourceLineNo">136</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      LOG.warn("Error while cleaning the logs", e);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  /**<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * Loop over the given directory entries, and check whether they can be deleted.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * If an entry is itself a directory it will be recursively checked and deleted itself iff<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * all subentries are deleted (and no new subentries are added in the mean time)<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   *<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * @param entries directory entries to check<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @return true if all entries were successfully deleted<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private boolean checkAndDeleteEntries(FileStatus[] entries) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (entries == null) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return true;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    boolean allEntriesDeleted = true;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    List&lt;FileStatus&gt; files = Lists.newArrayListWithCapacity(entries.length);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    for (FileStatus child : entries) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      Path path = child.getPath();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      if (child.isDirectory()) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        // for each subdirectory delete it and all entries if possible<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        if (!checkAndDeleteDirectory(path)) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          allEntriesDeleted = false;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      } else {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        // collect all files to attempt to delete in one batch<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        files.add(child);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    if (!checkAndDeleteFiles(files)) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      allEntriesDeleted = false;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    return allEntriesDeleted;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  <a name="line.172"></a>
+<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * Attempt to delete a directory and all files under that directory. Each child file is passed<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * through the delegates to see if it can be deleted. If the directory has no children when the<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * cleaners have finished it is deleted.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * &lt;p&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * If new children files are added between checks of the directory, the directory will &lt;b&gt;not&lt;/b&gt;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * be deleted.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * @param dir directory to check<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the directory was deleted, &lt;tt&gt;false&lt;/tt&gt; otherwise.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  @VisibleForTesting boolean checkAndDeleteDirectory(Path dir) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (LOG.isTraceEnabled()) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.trace("Checking directory: " + dir);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      FileStatus[] children = FSUtils.listStatus(fs, dir);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      boolean allChildrenDeleted = checkAndDeleteEntries(children);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  <a name="line.191"></a>
+<span class="sourceLineNo">192</span>      // if the directory still has children, we can't delete it, so we are done<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (!allChildrenDeleted) return false;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } catch (IOException e) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      e = e instanceof RemoteException ?<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.warn("Error while listing directory: " + dir, e);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      // couldn't list directory, so don't try to delete, and don't return success<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      return false;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // otherwise, all the children (that we know about) have been deleted, so we should try to<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // delete this directory. However, don't do so recursively so we don't delete files that have<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    // been added since we last checked.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    try {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return fs.delete(dir, false);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    } catch (IOException e) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (LOG.isTraceEnabled()) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        LOG.trace("Couldn't delete directory: " + dir, e);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      // couldn't delete w/o exception, so we can't return success.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      return false;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  /**<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * Run the given files through each of the cleaners to see if it should be deleted, deleting it if<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * necessary.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @param files List of FileStatus for the files to check (and possibly delete)<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * @return true iff successfully deleted all files<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  private boolean checkAndDeleteFiles(List&lt;FileStatus&gt; files) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // first check to see if the path is valid<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    List&lt;FileStatus&gt; validFiles = Lists.newArrayListWithCapacity(files.size());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    List&lt;FileStatus&gt; invalidFiles = Lists.newArrayList();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (FileStatus file : files) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (validate(file.getPath())) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        validFiles.add(file);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        LOG.warn("Found a wrongly formatted file: " + file.getPath() + " - will delete it.");<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        invalidFiles.add(file);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
 <span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Iterable&lt;FileStatus&gt; filteredFiles = cleaner.getDeletableFiles(deletableValidFiles);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      <a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // trace which cleaner is holding on to each file<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      if (LOG.isTraceEnabled()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        ImmutableSet&lt;FileStatus&gt; filteredFileSet = ImmutableSet.copyOf(filteredFiles);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        for (FileStatus file : deletableValidFiles) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          if (!filteredFileSet.contains(file)) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>            LOG.trace(file.getPath() + " is not deletable according to:" + cleaner);<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>      <a name="line.246"></a>
-<span class="sourceLineNo">247</span>      deletableValidFiles = filteredFiles;<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>    Iterable&lt;FileStatus&gt; filesToDelete = Iterables.concat(invalidFiles, deletableValidFiles);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    int deletedFileCount = 0;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    for (FileStatus file : filesToDelete) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      Path filePath = file.getPath();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      if (LOG.isDebugEnabled()) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        LOG.debug("Removing: " + filePath + " from archive");<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      try {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        boolean success = this.fs.delete(filePath, false);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (success) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          deletedFileCount++;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        } else {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          LOG.warn("Attempted to delete:" + filePath<a name="line.262"></a>
-<span class="sourceLineNo">263</span>              + ", but couldn't. Run cleaner chain and attempt to delete on next pass.");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      } catch (IOException e) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        e = e instanceof RemoteException ?<a name="line.266"></a>
-<span class="sourceLineNo">267</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        LOG.warn("Error while deleting: " + filePath, e);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return deletedFileCount == files.size();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void cleanup() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    for (T lc : this.cleanersChain) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        lc.stop("Exiting");<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      } catch (Throwable t) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        LOG.warn("Stopping", t);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>}<a name="line.285"></a>
+<span class="sourceLineNo">235</span>    Iterable&lt;FileStatus&gt; deletableValidFiles = validFiles;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // check each of the cleaners for the valid files<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    for (T cleaner : cleanersChain) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      if (cleaner.isStopped() || this.getStopper().isStopped()) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        LOG.warn("A file cleaner" + this.getName() + " is stopped, won't delete any more files in:"<a name="line.239"></a>
+<span class="sourceLineNo">240</span>            + this.oldFileDir);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return false;<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>      Iterable&lt;FileStatus&gt; filteredFiles = cleaner.getDeletableFiles(deletableValidFiles);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      <a name="line.245"></a>
+<span class="sourceLineNo">246</span>      // trace which cleaner is holding on to each file<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (LOG.isTraceEnabled()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        ImmutableSet&lt;FileStatus&gt; filteredFileSet = ImmutableSet.copyOf(filteredFiles);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        for (FileStatus file : deletableValidFiles) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          if (!filteredFileSet.contains(file)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            LOG.trace(file.getPath() + " is not deletable according to:" + cleaner);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      <a name="line.255"></a>
+<span class="sourceLineNo">256</span>      deletableValidFiles = filteredFiles;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    <a name="line.258"></a>
+<span class="sourceLineNo">259</span>    Iterable&lt;FileStatus&gt; filesToDelete = Iterables.concat(invalidFiles, deletableValidFiles);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    int deletedFileCount = 0;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (FileStatus file : filesToDelete) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Path filePath = file.getPath();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      if (LOG.isDebugEnabled()) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        LOG.debug("Removing: " + filePath + " from archive");<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      try {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        boolean success = this.fs.delete(filePath, false);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        if (success) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          deletedFileCount++;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        } else {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          LOG.warn("Attempted to delete:" + filePath<a name="line.271"></a>
+<span class="sourceLineNo">272</span>              + ", but couldn't. Run cleaner chain and attempt to delete on next pass.");<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      } catch (IOException e) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        e = e instanceof RemoteException ?<a name="line.275"></a>
+<span class="sourceLineNo">276</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        LOG.warn("Error while deleting: " + filePath, e);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return deletedFileCount == files.size();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public void cleanup() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    for (T lc : this.cleanersChain) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        lc.stop("Exiting");<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (Throwable t) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        LOG.warn("Stopping", t);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>}<a name="line.294"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
index bb59696..e16a05b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
@@ -30,21 +30,29 @@
 <span class="sourceLineNo">022</span>import org.apache.hadoop.fs.FileStatus;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.23"></a>
 <span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * General interface for cleaning files from a folder (generally an archive or<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * backup folder). These are chained via the {@link CleanerChore} to determine<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * if a given file should be deleted.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>@InterfaceAudience.Private<a name="line.30"></a>
-<span class="sourceLineNo">031</span>public interface FileCleanerDelegate extends Configurable, Stoppable {<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>  /**<a name="line.33"></a>
-<span class="sourceLineNo">034</span>   * Determines which of the given files are safe to delete<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   * @param files files to check for deletion<a name="line.35"></a>
-<span class="sourceLineNo">036</span>   * @return files that are ok to delete according to this cleaner<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  Iterable&lt;FileStatus&gt; getDeletableFiles(Iterable&lt;FileStatus&gt; files);<a name="line.38"></a>
-<span class="sourceLineNo">039</span>}<a name="line.39"></a>
+<span class="sourceLineNo">025</span>import java.util.Map;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * General interface for cleaning files from a folder (generally an archive or<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * backup folder). These are chained via the {@link CleanerChore} to determine<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * if a given file should be deleted.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> */<a name="line.31"></a>
+<span class="sourceLineNo">032</span>@InterfaceAudience.Private<a name="line.32"></a>
+<span class="sourceLineNo">033</span>public interface FileCleanerDelegate extends Configurable, Stoppable {<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  /**<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * Determines which of the given files are safe to delete<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * @param files files to check for deletion<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   * @return files that are ok to delete according to this cleaner<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  Iterable&lt;FileStatus&gt; getDeletableFiles(Iterable&lt;FileStatus&gt; files);<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  /**<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   * this method is used to pass some instance into subclass<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  void init(Map&lt;String, Object&gt; params);<a name="line.46"></a>
+<span class="sourceLineNo">047</span>}<a name="line.47"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
index 55690d1..bba66a8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
@@ -26,50 +26,58 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.cleaner;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.conf.Configuration;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.fs.FileSystem;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.Path;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * This Chore, every time it runs, will clear the HFiles in the hfile archive<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * folder that are deletable for each HFile cleaner in the chain.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Private<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public class HFileCleaner extends CleanerChore&lt;BaseHFileCleanerDelegate&gt; {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  public static final String MASTER_HFILE_CLEANER_PLUGINS = "hbase.master.hfilecleaner.plugins";<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
-<span class="sourceLineNo">039</span>   * @param period the period of time to sleep between each run<a name="line.39"></a>
-<span class="sourceLineNo">040</span>   * @param stopper the stopper<a name="line.40"></a>
-<span class="sourceLineNo">041</span>   * @param conf configuration to use<a name="line.41"></a>
-<span class="sourceLineNo">042</span>   * @param fs handle to the FS<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   * @param directory directory to be cleaned<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  public HFileCleaner(final int period, final Stoppable stopper, Configuration conf, FileSystem fs,<a name="line.45"></a>
-<span class="sourceLineNo">046</span>      Path directory) {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    super("HFileCleaner", period, stopper, conf, fs, directory, MASTER_HFILE_CLEANER_PLUGINS);<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>  @Override<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  protected boolean validate(Path file) {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    if (HFileLink.isBackReferencesDir(file) || HFileLink.isBackReferencesDir(file.getParent())) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      return true;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    }<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    return StoreFileInfo.validateStoreFileName(file.getName());<a name="line.55"></a>
+<span class="sourceLineNo">021</span>import java.util.Map;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FileSystem;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.Path;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * This Chore, every time it runs, will clear the HFiles in the hfile archive<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * folder that are deletable for each HFile cleaner in the chain.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> */<a name="line.33"></a>
+<span class="sourceLineNo">034</span>@InterfaceAudience.Private<a name="line.34"></a>
+<span class="sourceLineNo">035</span>public class HFileCleaner extends CleanerChore&lt;BaseHFileCleanerDelegate&gt; {<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public static final String MASTER_HFILE_CLEANER_PLUGINS = "hbase.master.hfilecleaner.plugins";<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>  public HFileCleaner(final int period, final Stoppable stopper, Configuration conf, FileSystem fs,<a name="line.39"></a>
+<span class="sourceLineNo">040</span>      Path directory) {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    this(period, stopper, conf, fs, directory, null);<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  }<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * @param period the period of time to sleep between each run<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   * @param stopper the stopper<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * @param conf configuration to use<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * @param fs handle to the FS<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * @param directory directory to be cleaned<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * @param params params could be used in subclass of BaseHFileCleanerDelegate<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   */<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public HFileCleaner(final int period, final Stoppable stopper, Configuration conf, FileSystem fs,<a name="line.52"></a>
+<span class="sourceLineNo">053</span>                      Path directory, Map&lt;String, Object&gt; params) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    super("HFileCleaner", period, stopper, conf, fs,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      directory, MASTER_HFILE_CLEANER_PLUGINS, params);<a name="line.55"></a>
 <span class="sourceLineNo">056</span>  }<a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Exposed for TESTING!<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public List&lt;BaseHFileCleanerDelegate&gt; getDelegatesForTesting() {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    return this.cleanersChain;<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">058</span>  @Override<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected boolean validate(Path file) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    if (HFileLink.isBackReferencesDir(file) || HFileLink.isBackReferencesDir(file.getParent())) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      return true;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    return StoreFileInfo.validateStoreFileName(file.getName());<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  /**<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * Exposed for TESTING!<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public List&lt;BaseHFileCleanerDelegate&gt; getDelegatesForTesting() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    return this.cleanersChain;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>}<a name="line.72"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
index a619c32..a4bff9e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
@@ -66,8 +66,8 @@
 <span class="sourceLineNo">058</span>   * @param masterServices master services provider<a name="line.58"></a>
 <span class="sourceLineNo">059</span>   */<a name="line.59"></a>
 <span class="sourceLineNo">060</span>  public DisabledTableSnapshotHandler(SnapshotDescription snapshot,<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      final MasterServices masterServices) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    super(snapshot, masterServices);<a name="line.62"></a>
+<span class="sourceLineNo">061</span>      final MasterServices masterServices, final SnapshotManager snapshotManager) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    super(snapshot, masterServices, snapshotManager);<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>  @Override<a name="line.65"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
index 4f446b4..180d078 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span><a name="line.50"></a>
 <span class="sourceLineNo">051</span>  public EnabledTableSnapshotHandler(SnapshotDescription snapshot, MasterServices master,<a name="line.51"></a>
 <span class="sourceLineNo">052</span>      final SnapshotManager manager) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    super(snapshot, master);<a name="line.53"></a>
+<span class="sourceLineNo">053</span>    super(snapshot, master, manager);<a name="line.53"></a>
 <span class="sourceLineNo">054</span>    this.coordinator = manager.getCoordinator();<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  }<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>


[28/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/util/class-use/ObjectIntPair.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/ObjectIntPair.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/ObjectIntPair.html
index 2b43bef..179215c 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/ObjectIntPair.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/ObjectIntPair.html
@@ -135,6 +135,10 @@
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#tmpPair">tmpPair</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#tmpPair">tmpPair</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
@@ -144,16 +148,19 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">BufferedDataBlockEncoder.SeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                                                        boolean&nbsp;includeTags)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">BufferedDataBlockEncoder.SeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
+                                                                        boolean&nbsp;includeTags,
+                                                                        boolean&nbsp;tagsCompressed)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">DiffKeyDeltaEncoder.DiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                                                      boolean&nbsp;includeTags)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html#DiffKeyDeltaEncoder.DiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">DiffKeyDeltaEncoder.DiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
+                                                                      boolean&nbsp;includeTags,
+                                                                      boolean&nbsp;tagsCompressed)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">FastDiffDeltaEncoder.FastDiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                                                                boolean&nbsp;includeTags)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.FastDiffSeekerState.html#FastDiffDeltaEncoder.FastDiffSeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">FastDiffDeltaEncoder.FastDiffSeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
+                                                                                boolean&nbsp;includeTags,
+                                                                                boolean&nbsp;tagsCompressed)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 dc592cb..7c0669d 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -490,13 +490,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</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="strong">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>
 <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="strong">PrettyPrinter.Unit</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="strong">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="strong">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="strong">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>
-<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="strong">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="strong">HBaseFsck.ErrorReporter.ERROR_CODE</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="strong">PoolMap.PoolType</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="strong">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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/util/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-use.html b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
index 3318fbf..84e68e4 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
@@ -917,6 +917,11 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/KeyLocker.html#org.apache.hadoop.hbase.master.snapshot">KeyLocker</a>
+<div class="block">A utility class to manage a set of locks.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Pair.html#org.apache.hadoop.hbase.master.snapshot">Pair</a>
 <div class="block">A generic class for pairs.</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 68b9639..7b1d128 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -158,9 +158,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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="strong">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="strong">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</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="strong">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index 927a396..f345983 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -1295,6 +1295,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.codec.prefixtree.<a href="org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeCodec.PrefixTreeEncodingState.html" title="class in org.apache.hadoop.hbase.codec.prefixtree"><span class="strong">PrefixTreeCodec.PrefixTreeEncodingState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexCodecV1.RowIndexEncodingState</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.io.crypto.<a href="org/apache/hadoop/hbase/io/crypto/Encryption.html" title="class in org.apache.hadoop.hbase.io.crypto"><span class="strong">Encryption</span></a></li>
@@ -1994,7 +1995,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/MemcachedBlockCache.HFileBlockTranscoder.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">MemcachedBlockCache.HFileBlockTranscoder</span></a> (implements net.spy.memcached.transcoders.Transcoder&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="strong">MemoryBoundedLogMessageBuffer</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.LogMessage.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="strong">MemoryBoundedLogMessageBuffer.LogMessage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreChunkPool</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreChunkPool</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreCompactor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreCompactor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreCompactorIterator.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreCompactorIterator</span></a> (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;E&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreFlusher</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>)</li>
@@ -2735,6 +2736,10 @@
 <li type="circle">org.apache.hadoop.hbase.classification.tools.<a href="org/apache/hadoop/hbase/classification/tools/RootDocProcessor.ExcludeHandler.html" title="class in org.apache.hadoop.hbase.classification.tools"><span class="strong">RootDocProcessor.ExcludeHandler</span></a> (implements java.lang.reflect.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/InvocationHandler.html?is-external=true" title="class or interface in java.lang.reflect">InvocationHandler</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">RootProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/RowCounter.RowCounterMapper.html" title="class in org.apache.hadoop.hbase.mapred"><span class="strong">RowCounter.RowCounterMapper</span></a> (implements org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TableMap.html" title="interface in org.apache.hadoop.hbase.mapred">TableMap</a>&lt;K,V&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexCodecV1</span></a> (implements org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexEncoderV1</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexSeekerV1</span></a> (implements org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexSeekerV1.SeekerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/RowModel.html" title="class in org.apache.hadoop.hbase.rest.model"><span class="strong">RowModel</span></a> (implements org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/ProtobufMessageHandler.html" title="interface in org.apache.hadoop.hbase.rest">ProtobufMessageHandler</a>, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">RowMutations</span></a> (implements org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.codec.prefixtree.decode.row.<a href="org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.decode.row"><span class="strong">RowNodeReader</span></a></li>
@@ -3387,7 +3392,7 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServiceNotRunningException.html" title="class in org.apache.hadoop.hbase"><span class="strong">ServiceNotRunningException</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/StoppedRpcClientException.html" title="class in org.apache.hadoop.hbase.ipc"><span class="strong">StoppedRpcClientException</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TableInfoMissingException.html" title="class in org.apache.hadoop.hbase"><span class="strong">TableInfoMissingException</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">UnexpectedStateException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.exceptions.<a href="org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">UnexpectedStateException</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/WrongRowIOException.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">WrongRowIOException</span></a></li>
 </ul>
 </li>
@@ -4132,6 +4137,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HBaseAdmin.ProcedureFuture.WaitForStateCallable.html" title="interface in org.apache.hadoop.hbase.client"><span class="strong">HBaseAdmin.ProcedureFuture.WaitForStateCallable</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">HBaseFsck.ErrorReporter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc"><span class="strong">HBaseRPCErrorHandler</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">HeapMemoryManager.HeapMemoryTuneObserver</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io"><span class="strong">HeapSize</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile"><span class="strong">Cacheable</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/serialized-form.html
----------------------------------------------------------------------
diff --git a/devapidocs/serialized-form.html b/devapidocs/serialized-form.html
index d869413..6c94e1b 100644
--- a/devapidocs/serialized-form.html
+++ b/devapidocs/serialized-form.html
@@ -696,6 +696,15 @@
 </a>
 <h3>Class <a href="org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" title="class in org.apache.hadoop.hbase.exceptions">org.apache.hadoop.hbase.exceptions.TimeoutIOException</a> extends <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> implements Serializable</h3>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.exceptions.UnexpectedStateException">
+<!--   -->
+</a>
+<h3>Class <a href="org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">org.apache.hadoop.hbase.exceptions.UnexpectedStateException</a> extends <a href="org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> implements Serializable</h3>
+<dl class="nameValue">
+<dt>serialVersionUID:</dt>
+<dd>-6727953144066746071L</dd>
+</dl>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.exceptions.UnknownProtocolException">
 <!--   -->
 </a>
@@ -1380,15 +1389,6 @@
 <dd>1L</dd>
 </dl>
 </li>
-<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver.UnexpectedStateException">
-<!--   -->
-</a>
-<h3>Class <a href="org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver.UnexpectedStateException</a> extends <a href="org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> implements Serializable</h3>
-<dl class="nameValue">
-<dt>serialVersionUID:</dt>
-<dd>-6727953144066746071L</dd>
-</dl>
-</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.regionserver.WrongRegionException">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html b/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html
new file mode 100644
index 0000000..5b1d8d8
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.exceptions;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>@InterfaceAudience.Private<a name="line.23"></a>
+<span class="sourceLineNo">024</span>public class UnexpectedStateException extends HBaseIOException {<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>  private static final long serialVersionUID = -6727953144066746071L;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>  public UnexpectedStateException() {<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    super();<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  }<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>  public UnexpectedStateException(String message) {<a name="line.32"></a>
+<span class="sourceLineNo">033</span>    super(message);<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  }<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  public UnexpectedStateException(String message, Throwable cause) {<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    super(message, cause);<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  }<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  public UnexpectedStateException(Throwable cause) {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    super(cause);<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  }<a name="line.42"></a>
+<span class="sourceLineNo">043</span>}<a name="line.43"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[10/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
index ac4f63e..9ec3893 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
@@ -35,358 +35,366 @@
 <span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Timer;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.TimerTask;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.google.common.annotations.VisibleForTesting;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import com.google.common.collect.Lists;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.Log;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.commons.logging.LogFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * we will ignore updates to that snapshot's files.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * &lt;p&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * being run.<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * &lt;p&gt;<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * also removed from the cache.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * all the files under all the regions.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * &lt;p&gt;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span>@InterfaceAudience.Private<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@InterfaceStability.Evolving<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class SnapshotFileCache implements Stoppable {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  interface SnapshotFileInspector {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>     * Returns a collection of file names needed by the snapshot.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * @return the collection of file names needed by the snapshot.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private volatile boolean stop = false;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final FileSystem fs;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final SnapshotFileInspector fileInspector;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final Path snapshotDir;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * them if they haven't changed since the last time we looked.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final Timer refreshTimer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private long lastModifiedTime = Long.MIN_VALUE;<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * filesystem.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * &lt;p&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Immediately loads the file cache.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *          hbase root directory<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        refreshThreadName, inspectSnapshotFiles);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * filesystem<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param rootDir hbase root directory<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.fs = fs;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      cacheRefreshPeriod);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * cache refreshes.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * &lt;p&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Blocks until the cache is refreshed.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * &lt;p&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Exposed for TESTING.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public void triggerCacheRefreshForTesting() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      SnapshotFileCache.this.refreshCache();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    } catch (IOException e) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    LOG.debug("Current cache:" + cache);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * is refreshed and the cache checked again for that file.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * This ensures that we never return files that exist.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * &lt;p&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * at that point, cache will still think the file system contains that file and return<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *              is called (NOT LAZY)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      throws IOException {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    boolean refreshed = false;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (FileStatus file : files) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      String fileName = file.getPath().getName();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        refreshCache();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        refreshed = true;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (cache.contains(fileName)) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      if (snapshotsInProgress == null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        snapshotsInProgress = getSnapshotsInProgress();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        continue;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      unReferencedFiles.add(file);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    return unReferencedFiles;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private synchronized void refreshCache() throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean hasChanges = false;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (FileNotFoundException e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      if (this.cache.size() &gt; 0) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      if (!hasChanges) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        if (tmpSnapshots != null) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } catch (FileNotFoundException e) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Nothing todo, if the tmp dir is empty<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!hasChanges) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<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>    // directory was modified, so we need to reload our cache<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // 1. update the modified time<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.lastModifiedTime = lastTimestamp;<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // 2.clear the cache<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.cache.clear();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // 3. check each of the snapshot directories<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (snapshots == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      // remove all the remembered snapshots because we don't have any left<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      this.snapshots.clear();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      return;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // 3.1 iterate through the on-disk snapshots<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    for (FileStatus snapshot : snapshots) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String name = snapshot.getPath().getName();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // its not the tmp dir,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // probably changed.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          // get all files for the snapshot and create a new info<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        // 3.2 add all the files to cache<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        this.cache.addAll(files.getFiles());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        known.put(name, files);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // 4. set the snapshots we are tracking<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    this.snapshots.clear();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.snapshots.putAll(known);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress() throws IOException {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // only add those files to the cache, but not to the known snapshots<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // only add those files to the cache, but not to the known snapshots<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (running != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      for (FileStatus run : running) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        } catch (CorruptedSnapshotException e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          // See HBASE-16464<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            // If the snapshot is not in progress, we will delete it<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            if (!fs.exists(new Path(run.getPath(),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              SnapshotDescriptionUtils.SNAPSHOT_IN_PROGRESS))) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>              fs.delete(run.getPath(), true);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>              LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.313"></a>
-<span class="sourceLineNo">314</span>            }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          } else {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            throw e;<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>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return snapshotInProgress;<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>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public class RefreshCacheTask extends TimerTask {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public void run() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        SnapshotFileCache.this.refreshCache();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      } catch (IOException e) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public void stop(String why) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (!this.stop) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.stop = true;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.refreshTimer.cancel();<a name="line.342"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import com.google.common.annotations.VisibleForTesting;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.google.common.collect.Lists;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.commons.logging.Log;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.LogFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<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.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * &lt;p&gt;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * we will ignore updates to that snapshot's files.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * being run.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * also removed from the cache.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * all the files under all the regions.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;p&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>@InterfaceAudience.Private<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceStability.Evolving<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class SnapshotFileCache implements Stoppable {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  interface SnapshotFileInspector {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>     * Returns a collection of file names needed by the snapshot.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return the collection of file names needed by the snapshot.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private volatile boolean stop = false;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final FileSystem fs;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final SnapshotFileInspector fileInspector;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final Path snapshotDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * them if they haven't changed since the last time we looked.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final Timer refreshTimer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private long lastModifiedTime = Long.MIN_VALUE;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * filesystem.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * &lt;p&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * Immediately loads the file cache.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *          hbase root directory<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        refreshThreadName, inspectSnapshotFiles);<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>  /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * filesystem<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @param rootDir hbase root directory<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.fs = fs;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      cacheRefreshPeriod);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * cache refreshes.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Blocks until the cache is refreshed.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * &lt;p&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Exposed for TESTING.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void triggerCacheRefreshForTesting() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      SnapshotFileCache.this.refreshCache();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (IOException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    LOG.debug("Current cache:" + cache);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * is refreshed and the cache checked again for that file.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * This ensures that we never return files that exist.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * &lt;p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * at that point, cache will still think the file system contains that file and return<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   *              is called (NOT LAZY)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      final SnapshotManager snapshotManager)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    boolean refreshed = false;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (FileStatus file : files) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      String fileName = file.getPath().getName();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        refreshCache();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        refreshed = true;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (cache.contains(fileName)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        continue;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (snapshotsInProgress == null) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        snapshotsInProgress = getSnapshotsInProgress(snapshotManager);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        continue;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      unReferencedFiles.add(file);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    return unReferencedFiles;<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>  private synchronized void refreshCache() throws IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    boolean hasChanges = false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    } catch (FileNotFoundException e) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      if (this.cache.size() &gt; 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      return;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (!hasChanges) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        if (tmpSnapshots != null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    } catch (FileNotFoundException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // Nothing todo, if the tmp dir is empty<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>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    if (!hasChanges) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      return;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // directory was modified, so we need to reload our cache<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    // 1. update the modified time<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    this.lastModifiedTime = lastTimestamp;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    // 2.clear the cache<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.cache.clear();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // 3. check each of the snapshot directories<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    if (snapshots == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // remove all the remembered snapshots because we don't have any left<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      this.snapshots.clear();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // 3.1 iterate through the on-disk snapshots<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    for (FileStatus snapshot : snapshots) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      String name = snapshot.getPath().getName();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // its not the tmp dir,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        // probably changed.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          // get all files for the snapshot and create a new info<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        // 3.2 add all the files to cache<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        this.cache.addAll(files.getFiles());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        known.put(name, files);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // 4. set the snapshots we are tracking<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    this.snapshots.clear();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.snapshots.putAll(known);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress(<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    final SnapshotManager snapshotManager) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    // only add those files to the cache, but not to the known snapshots<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // only add those files to the cache, but not to the known snapshots<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (running != null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      for (FileStatus run : running) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ReentrantLock lock = null;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        if (snapshotManager != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          lock = snapshotManager.getLocks().acquireLock(run.getPath().getName());<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        } catch (CorruptedSnapshotException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          // See HBASE-16464<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>            // If the snapshot is corrupt, we will delete it<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            fs.delete(run.getPath(), true);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>            throw e;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        } finally {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          if (lock != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            lock.unlock();<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>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return snapshotInProgress;<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>  /**<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  public class RefreshCacheTask extends TimerTask {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    @Override<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    public void run() {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      try {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        SnapshotFileCache.this.refreshCache();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  @Override<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public boolean isStopped() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return this.stop;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Information about a snapshot directory<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private static class SnapshotDirectoryInfo {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long lastModified;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Collection&lt;String&gt; files;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.lastModified = mtime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      this.files = files;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    /**<a name="line.364"></a>
-<span class="sourceLineNo">365</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>     */<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public Collection&lt;String&gt; getFiles() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.files;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * Check if the snapshot directory has been modified<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     * @param mtime current modification time of the directory<a name="line.373"></a>
-<span class="sourceLineNo">374</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.374"></a>
-<span class="sourceLineNo">375</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>     */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    public boolean hasBeenModified(long mtime) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return this.lastModified &lt; mtime;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>}<a name="line.381"></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>  @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public void stop(String why) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    if (!this.stop) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.stop = true;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      this.refreshTimer.cancel();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  public boolean isStopped() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return this.stop;<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>   * Information about a snapshot directory<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private static class SnapshotDirectoryInfo {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    long lastModified;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    Collection&lt;String&gt; files;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      this.lastModified = mtime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      this.files = files;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    /**<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public Collection&lt;String&gt; getFiles() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return this.files;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>    /**<a name="line.379"></a>
+<span class="sourceLineNo">380</span>     * Check if the snapshot directory has been modified<a name="line.380"></a>
+<span class="sourceLineNo">381</span>     * @param mtime current modification time of the directory<a name="line.381"></a>
+<span class="sourceLineNo">382</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    public boolean hasBeenModified(long mtime) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      return this.lastModified &lt; mtime;<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>
 
 
 


[43/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html
new file mode 100644
index 0000000..d18af7a
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html
@@ -0,0 +1,509 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RowIndexCodecV1 (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="RowIndexCodecV1 (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexCodecV1.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.io.encoding</div>
+<h2 title="Class RowIndexCodecV1" class="title">Class RowIndexCodecV1</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></dd>
+</dl>
+<hr>
+<br>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.54">RowIndexCodecV1</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></pre>
+<div class="block">Store cells following every row's start offset, so we can binary search to a row's cells.
+
+ Format:
+ flat cells
+ integer: number of rows
+ integer: row0's offset
+ integer: row1's offset
+ ....
+ integer: dataSize</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1.RowIndexEncodingState</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_org.apache.hadoop.hbase.io.encoding.DataBlockEncoder">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#RowIndexCodecV1()">RowIndexCodecV1</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createFirstKeyCell(java.nio.ByteBuffer,%20int)">createFirstKeyCell</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
+                                    int&nbsp;keyLength)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                        <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>
+<div class="block">Create a HFileBlock seeker which find KeyValues within a block.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#decodeKeyValues(java.io.DataInputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">decodeKeyValues</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
+                              <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>
+<div class="block">Decode.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+            <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+            <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>
+<div class="block">Encodes a KeyValue.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])">endBlockEncoding</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+                                <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
+                                byte[]&nbsp;uncompressedBytesWithHeader)</code>
+<div class="block">Ends encoding for a block of KeyValues.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>
+<div class="block">Return first key in block as a cell.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>
+<div class="block">Creates an encoder specific decoding context, which will prepare the data
+ before actual decoding</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+                                                      byte[]&nbsp;header,
+                                                      <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>
+<div class="block">Creates a encoder specific encoding context</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">startBlockEncoding</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
+                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>
+<div class="block">Starts encoding for a block of KeyValues.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="RowIndexCodecV1()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>RowIndexCodecV1</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.54">RowIndexCodecV1</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext, java.io.DataOutputStream)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startBlockEncoding</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.61">startBlockEncoding</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;blkEncodingCtx,
+                      <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)
+                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Starts encoding for a block of KeyValues. Call
+ <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])"><code>DataBlockEncoder.endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[])</code></a> to finish
+ encoding of a block.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#startBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">startBlockEncoding</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="encode(org.apache.hadoop.hbase.Cell, org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext, java.io.DataOutputStream)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.79">encode</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+         <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+         <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)
+           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Encodes a KeyValue.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>unencoded kv size written</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext, java.io.DataOutputStream, byte[])">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>endBlockEncoding</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.88">endBlockEncoding</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+                    <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
+                    byte[]&nbsp;uncompressedBytesWithHeader)
+                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])">DataBlockEncoder</a></code></strong></div>
+<div class="block">Ends encoding for a block of KeyValues. Gives a chance for the encoder to do the finishing
+ stuff for the encoded block. It must be called at the end of block encoding.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#endBlockEncoding(org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream,%20byte[])">endBlockEncoding</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="decodeKeyValues(java.io.DataInputStream, org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>decodeKeyValues</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.103">decodeKeyValues</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;source,
+                         <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)
+                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#decodeKeyValues(java.io.DataInputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Decode.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#decodeKeyValues(java.io.DataInputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">decodeKeyValues</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>source</code> - Compressed stream of KeyValues.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>Uncompressed block of KeyValues.</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - If there is an error in source.</dd></dl>
+</li>
+</ul>
+<a name="newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding, byte[], org.apache.hadoop.hbase.io.hfile.HFileContext)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>newDataBlockEncodingContext</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.142">newDataBlockEncodingContext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+                                                    byte[]&nbsp;header,
+                                                    <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Creates a encoder specific encoding context</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>encoding</code> - encoding strategy used</dd><dd><code>header</code> - header bytes to be written, put a dummy header here if the header
+          is unknown</dd><dd><code>meta</code> - HFile meta data</dd>
+<dt><span class="strong">Returns:</span></dt><dd>a newly created encoding context</dd></dl>
+</li>
+</ul>
+<a name="newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>newDataBlockDecodingContext</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.148">newDataBlockDecodingContext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Creates an encoder specific decoding context, which will prepare the data
+ before actual decoding</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>meta</code> - HFile meta data</dd>
+<dt><span class="strong">Returns:</span></dt><dd>a newly created decoding context</dd></dl>
+</li>
+</ul>
+<a name="getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFirstKeyCellInBlock</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.153">getFirstKeyCellInBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Return first key in block as a cell. Useful for indexing. Typically does not make
+ a deep copy but returns a buffer wrapping a segment of the actual block's
+ byte array. This is because the first key in block is usually stored
+ unencoded.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>block</code> - encoded block we want index, the position will not change</dd>
+<dt><span class="strong">Returns:</span></dt><dd>First key in block as a cell.</dd></dl>
+</li>
+</ul>
+<a name="createSeeker(org.apache.hadoop.hbase.CellComparator, org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createSeeker</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.163">createSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                                          <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">DataBlockEncoder</a></code></strong></div>
+<div class="block">Create a HFileBlock seeker which find KeyValues within a block.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>comparator</code> - what kind of comparison should be used</dd>
+<dt><span class="strong">Returns:</span></dt><dd>A newly created seeker.</dd></dl>
+</li>
+</ul>
+<a name="createFirstKeyCell(java.nio.ByteBuffer, int)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createFirstKeyCell</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#line.168">createFirstKeyCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
+                      int&nbsp;keyLength)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexCodecV1.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html
new file mode 100644
index 0000000..6bbde65
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html
@@ -0,0 +1,398 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RowIndexEncoderV1 (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="RowIndexEncoderV1 (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexEncoderV1.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexEncoderV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.io.encoding</div>
+<h2 title="Class RowIndexEncoderV1" class="title">Class RowIndexEncoderV1</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.io.encoding.RowIndexEncoderV1</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.28">RowIndexEncoderV1</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#encodingCtx">encodingCtx</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#lastCell">lastCell</a></strong></code>
+<div class="block">The Cell previously appended.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#LOG">LOG</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#out">out</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteArrayOutputStream</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#rowsOffsetBAOS">rowsOffsetBAOS</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#startOffset">startOffset</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#RowIndexEncoderV1(java.io.DataOutputStream,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext)">RowIndexEncoderV1</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#checkRow(org.apache.hadoop.hbase.Cell)">checkRow</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#flush()">flush</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#write(org.apache.hadoop.hbase.Cell)">write</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.29">LOG</a></pre>
+</li>
+</ul>
+<a name="lastCell">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>lastCell</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.32">lastCell</a></pre>
+<div class="block">The Cell previously appended.</div>
+</li>
+</ul>
+<a name="out">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>out</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.34">out</a></pre>
+</li>
+</ul>
+<a name="encodingCtx">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encodingCtx</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.35">encodingCtx</a></pre>
+</li>
+</ul>
+<a name="startOffset">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startOffset</h4>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.36">startOffset</a></pre>
+</li>
+</ul>
+<a name="rowsOffsetBAOS">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rowsOffsetBAOS</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteArrayOutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.37">rowsOffsetBAOS</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="RowIndexEncoderV1(java.io.DataOutputStream, org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>RowIndexEncoderV1</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.40">RowIndexEncoderV1</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out,
+                 <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="write(org.apache.hadoop.hbase.Cell)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>write</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.45">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="checkRow(org.apache.hadoop.hbase.Cell)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkRow</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.79">checkRow</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="flush()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>flush</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#line.96">flush</a>()
+           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexEncoderV1.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexEncoderV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
new file mode 100644
index 0000000..09f2f11
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
@@ -0,0 +1,520 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RowIndexSeekerV1.SeekerState (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="RowIndexSeekerV1.SeekerState (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexSeekerV1.SeekerState.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.SeekerState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.io.encoding</div>
+<h2 title="Class RowIndexSeekerV1.SeekerState" class="title">Class RowIndexSeekerV1.SeekerState</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#line.311">RowIndexSeekerV1.SeekerState</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#currentBuffer">currentBuffer</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferedKeyOnlyKeyValue</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#currentKey">currentKey</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#KEY_VALUE_LEN_SIZE">KEY_VALUE_LEN_SIZE</a></strong></code>
+<div class="block">The size of a (key length, value length) tuple that prefixes each entry
+ in a data block.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#keyBuffer">keyBuffer</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#keyLength">keyLength</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#memstoreTS">memstoreTS</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#nextKvOffset">nextKvOffset</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#startOffset">startOffset</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#tagsLength">tagsLength</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#tagsOffset">tagsOffset</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#valueLength">valueLength</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#valueOffset">valueOffset</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private </code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#RowIndexSeekerV1.SeekerState()">RowIndexSeekerV1.SeekerState</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#copyFromNext(org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState)">copyFromNext</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a>&nbsp;nextState)</code>
+<div class="block">Copy the state from the next one into this instance (the previous state placeholder).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#getCellBufSize()">getCellBufSize</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#invalidate()">invalidate</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#isValid()">isValid</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#toCell()">toCell</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="KEY_VALUE_LEN_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>KEY_VALUE_LEN_SIZE</h4>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.316">KEY_VALUE_LEN_SIZE</a></pre>
+<div class="block">The size of a (key length, value length) tuple that prefixes each entry
+ in a data block.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState.KEY_VALUE_LEN_SIZE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="currentBuffer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>currentBuffer</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.318">currentBuffer</a></pre>
+</li>
+</ul>
+<a name="startOffset">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startOffset</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.319">startOffset</a></pre>
+</li>
+</ul>
+<a name="valueOffset">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOffset</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.320">valueOffset</a></pre>
+</li>
+</ul>
+<a name="keyLength">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>keyLength</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.321">keyLength</a></pre>
+</li>
+</ul>
+<a name="valueLength">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueLength</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.322">valueLength</a></pre>
+</li>
+</ul>
+<a name="tagsLength">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tagsLength</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.323">tagsLength</a></pre>
+</li>
+</ul>
+<a name="tagsOffset">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tagsOffset</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.324">tagsOffset</a></pre>
+</li>
+</ul>
+<a name="keyBuffer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>keyBuffer</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.326">keyBuffer</a></pre>
+</li>
+</ul>
+<a name="memstoreTS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>memstoreTS</h4>
+<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.327">memstoreTS</a></pre>
+</li>
+</ul>
+<a name="nextKvOffset">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>nextKvOffset</h4>
+<pre>protected&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.328">nextKvOffset</a></pre>
+</li>
+</ul>
+<a name="currentKey">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>currentKey</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferedKeyOnlyKeyValue</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.330">currentKey</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="RowIndexSeekerV1.SeekerState()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>RowIndexSeekerV1.SeekerState</h4>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.311">RowIndexSeekerV1.SeekerState</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="isValid()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isValid</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.332">isValid</a>()</pre>
+</li>
+</ul>
+<a name="invalidate()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>invalidate</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.336">invalidate</a>()</pre>
+</li>
+</ul>
+<a name="copyFromNext(org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyFromNext</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.346">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a>&nbsp;nextState)</pre>
+<div class="block">Copy the state from the next one into this instance (the previous state placeholder). Used to
+ save the previous state when we are advancing the seeker to the next key/value.</div>
+</li>
+</ul>
+<a name="toString()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.364">toString</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getCellBufSize()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCellBufSize</h4>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.368">getCellBufSize</a>()</pre>
+</li>
+</ul>
+<a name="toCell()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toCell</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#line.376">toCell</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/RowIndexSeekerV1.SeekerState.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.SeekerState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[09/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
index ac4f63e..9ec3893 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
@@ -35,358 +35,366 @@
 <span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Timer;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.TimerTask;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.google.common.annotations.VisibleForTesting;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import com.google.common.collect.Lists;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.Log;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.commons.logging.LogFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * we will ignore updates to that snapshot's files.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * &lt;p&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * being run.<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * &lt;p&gt;<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * also removed from the cache.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * all the files under all the regions.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * &lt;p&gt;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span>@InterfaceAudience.Private<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@InterfaceStability.Evolving<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class SnapshotFileCache implements Stoppable {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  interface SnapshotFileInspector {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>     * Returns a collection of file names needed by the snapshot.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * @return the collection of file names needed by the snapshot.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private volatile boolean stop = false;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final FileSystem fs;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final SnapshotFileInspector fileInspector;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final Path snapshotDir;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * them if they haven't changed since the last time we looked.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final Timer refreshTimer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private long lastModifiedTime = Long.MIN_VALUE;<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * filesystem.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * &lt;p&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Immediately loads the file cache.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *          hbase root directory<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        refreshThreadName, inspectSnapshotFiles);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<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>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * filesystem<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param rootDir hbase root directory<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.fs = fs;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      cacheRefreshPeriod);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * cache refreshes.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * &lt;p&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Blocks until the cache is refreshed.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * &lt;p&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Exposed for TESTING.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public void triggerCacheRefreshForTesting() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      SnapshotFileCache.this.refreshCache();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    } catch (IOException e) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    LOG.debug("Current cache:" + cache);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * is refreshed and the cache checked again for that file.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * This ensures that we never return files that exist.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * &lt;p&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * at that point, cache will still think the file system contains that file and return<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *              is called (NOT LAZY)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      throws IOException {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    boolean refreshed = false;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (FileStatus file : files) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      String fileName = file.getPath().getName();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        refreshCache();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        refreshed = true;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (cache.contains(fileName)) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      if (snapshotsInProgress == null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        snapshotsInProgress = getSnapshotsInProgress();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        continue;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      unReferencedFiles.add(file);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    return unReferencedFiles;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private synchronized void refreshCache() throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean hasChanges = false;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (FileNotFoundException e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      if (this.cache.size() &gt; 0) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      if (!hasChanges) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        if (tmpSnapshots != null) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } catch (FileNotFoundException e) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Nothing todo, if the tmp dir is empty<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!hasChanges) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<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>    // directory was modified, so we need to reload our cache<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // 1. update the modified time<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.lastModifiedTime = lastTimestamp;<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // 2.clear the cache<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.cache.clear();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // 3. check each of the snapshot directories<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (snapshots == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      // remove all the remembered snapshots because we don't have any left<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      this.snapshots.clear();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      return;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // 3.1 iterate through the on-disk snapshots<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    for (FileStatus snapshot : snapshots) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String name = snapshot.getPath().getName();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // its not the tmp dir,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // probably changed.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          // get all files for the snapshot and create a new info<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        // 3.2 add all the files to cache<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        this.cache.addAll(files.getFiles());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        known.put(name, files);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // 4. set the snapshots we are tracking<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    this.snapshots.clear();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.snapshots.putAll(known);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress() throws IOException {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // only add those files to the cache, but not to the known snapshots<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // only add those files to the cache, but not to the known snapshots<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (running != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      for (FileStatus run : running) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        } catch (CorruptedSnapshotException e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          // See HBASE-16464<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            // If the snapshot is not in progress, we will delete it<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            if (!fs.exists(new Path(run.getPath(),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              SnapshotDescriptionUtils.SNAPSHOT_IN_PROGRESS))) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>              fs.delete(run.getPath(), true);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>              LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.313"></a>
-<span class="sourceLineNo">314</span>            }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          } else {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            throw e;<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>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return snapshotInProgress;<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>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public class RefreshCacheTask extends TimerTask {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public void run() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        SnapshotFileCache.this.refreshCache();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      } catch (IOException e) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public void stop(String why) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (!this.stop) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.stop = true;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.refreshTimer.cancel();<a name="line.342"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import com.google.common.annotations.VisibleForTesting;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.google.common.collect.Lists;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.commons.logging.Log;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.LogFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<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.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * Intelligently keep track of all the files for all the snapshots.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * &lt;p&gt;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * A cache of files is kept to avoid querying the {@link FileSystem} frequently. If there is a cache<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * miss the directory modification time is used to ensure that we don't rescan directories that we<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * already have in cache. We only check the modification times of the snapshot directories<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * (/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * New snapshots will be added to the cache and deleted snapshots will be removed when we refresh<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * we will ignore updates to that snapshot's files.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * This is sufficient because each snapshot has its own directory and is added via an atomic rename<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;i&gt;once&lt;/i&gt;, when the snapshot is created. We don't need to worry about the data in the snapshot<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * being run.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * also removed from the cache.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * A {@link SnapshotFileCache.SnapshotFileInspector} must be passed when creating &lt;tt&gt;this&lt;/tt&gt; to<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * This allows you to only cache files under, for instance, all the logs in the .logs directory or<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * all the files under all the regions.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;p&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;tt&gt;this&lt;/tt&gt; also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * snapshots and will attempt to cache files from those snapshots as well.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>@InterfaceAudience.Private<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceStability.Evolving<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class SnapshotFileCache implements Stoppable {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  interface SnapshotFileInspector {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>     * Returns a collection of file names needed by the snapshot.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * @param snapshotDir {@link Path} to the snapshot directory to scan.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return the collection of file names needed by the snapshot.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Log LOG = LogFactory.getLog(SnapshotFileCache.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private volatile boolean stop = false;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final FileSystem fs;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final SnapshotFileInspector fileInspector;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final Path snapshotDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final Set&lt;String&gt; cache = new HashSet&lt;String&gt;();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * This is a helper map of information about the snapshot directories so we don't need to rescan<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * them if they haven't changed since the last time we looked.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final Map&lt;String, SnapshotDirectoryInfo&gt; snapshots =<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final Timer refreshTimer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private long lastModifiedTime = Long.MIN_VALUE;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * filesystem.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * &lt;p&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * Immediately loads the file cache.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param conf to extract the configured {@link FileSystem} where the snapshots are stored and<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *          hbase root directory<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * @throws IOException if the {@link FileSystem} or root directory cannot be loaded<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public SnapshotFileCache(Configuration conf, long cacheRefreshPeriod, String refreshThreadName,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      SnapshotFileInspector inspectSnapshotFiles) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this(FSUtils.getCurrentFileSystem(conf), FSUtils.getRootDir(conf), 0, cacheRefreshPeriod,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        refreshThreadName, inspectSnapshotFiles);<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>  /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * filesystem<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @param fs {@link FileSystem} where the snapshots are stored<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @param rootDir hbase root directory<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param cacheRefreshDelay amount of time to wait for the cache to be refreshed<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param refreshThreadName name of the cache refresh thread<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public SnapshotFileCache(FileSystem fs, Path rootDir, long cacheRefreshPeriod,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      long cacheRefreshDelay, String refreshThreadName, SnapshotFileInspector inspectSnapshotFiles) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.fs = fs;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.fileInspector = inspectSnapshotFiles;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    this.snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // periodically refresh the file cache to make sure we aren't superfluously saving files.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.refreshTimer = new Timer(refreshThreadName, true);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    this.refreshTimer.scheduleAtFixedRate(new RefreshCacheTask(), cacheRefreshDelay,<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      cacheRefreshPeriod);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * cache refreshes.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Blocks until the cache is refreshed.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * &lt;p&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Exposed for TESTING.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void triggerCacheRefreshForTesting() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      SnapshotFileCache.this.refreshCache();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (IOException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.warn("Failed to refresh snapshot hfile cache!", e);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    LOG.debug("Current cache:" + cache);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Check to see if any of the passed file names is contained in any of the snapshots.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * First checks an in-memory cache of the files to keep. If its not in the cache, then the cache<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * is refreshed and the cache checked again for that file.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * This ensures that we never return files that exist.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * &lt;p&gt;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Note this may lead to periodic false positives for the file being referenced. Periodically, the<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * cache is refreshed even if there are no requests to ensure that the false negatives get removed<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * at that point, cache will still think the file system contains that file and return<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * &lt;tt&gt;true&lt;/tt&gt;, even if it is no longer present (false positive). However, if the file never was<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * on the filesystem, we will never find it and always return &lt;tt&gt;false&lt;/tt&gt;.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @param files file to check, NOTE: Relies that files are loaded from hdfs before method<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   *              is called (NOT LAZY)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @return &lt;tt&gt;unReferencedFiles&lt;/tt&gt; the collection of files that do not have snapshot references<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @throws IOException if there is an unexpected error reaching the filesystem.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  // XXX this is inefficient to synchronize on the method, when what we really need to guard against<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // is an illegal access to the cache. Really we could do a mutex-guarded pointer swap on the<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  // cache, but that seems overkill at the moment and isn't necessarily a bottleneck.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  public synchronized Iterable&lt;FileStatus&gt; getUnreferencedFiles(Iterable&lt;FileStatus&gt; files,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      final SnapshotManager snapshotManager)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    List&lt;FileStatus&gt; unReferencedFiles = Lists.newArrayList();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    List&lt;String&gt; snapshotsInProgress = null;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    boolean refreshed = false;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (FileStatus file : files) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      String fileName = file.getPath().getName();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      if (!refreshed &amp;&amp; !cache.contains(fileName)) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        refreshCache();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        refreshed = true;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (cache.contains(fileName)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        continue;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (snapshotsInProgress == null) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        snapshotsInProgress = getSnapshotsInProgress(snapshotManager);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (snapshotsInProgress.contains(fileName)) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        continue;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      unReferencedFiles.add(file);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    return unReferencedFiles;<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>  private synchronized void refreshCache() throws IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    long lastTimestamp = Long.MAX_VALUE;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    boolean hasChanges = false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // get the status of the snapshots directory and check if it is has changes<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FileStatus dirStatus = fs.getFileStatus(snapshotDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      lastTimestamp = dirStatus.getModificationTime();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    } catch (FileNotFoundException e) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      if (this.cache.size() &gt; 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      return;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // get the status of the snapshots temporary directory and check if it has changes<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    // The top-level directory timestamp is not updated, so we have to check the inner-level.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      FileStatus tempDirStatus = fs.getFileStatus(snapshotTmpDir);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      lastTimestamp = Math.min(lastTimestamp, tempDirStatus.getModificationTime());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (!hasChanges) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        FileStatus[] tmpSnapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        if (tmpSnapshots != null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          for (FileStatus dirStatus: tmpSnapshots) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>            lastTimestamp = Math.min(lastTimestamp, dirStatus.getModificationTime());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          hasChanges |= (lastTimestamp &gt;= lastModifiedTime);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    } catch (FileNotFoundException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // Nothing todo, if the tmp dir is empty<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>    // if the snapshot directory wasn't modified since we last check, we are done<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    if (!hasChanges) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      return;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // directory was modified, so we need to reload our cache<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // there could be a slight race here where we miss the cache, check the directory modification<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // time, then someone updates the directory, causing us to not scan the directory again.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // However, snapshot directories are only created once, so this isn't an issue.<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    // 1. update the modified time<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    this.lastModifiedTime = lastTimestamp;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    // 2.clear the cache<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.cache.clear();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Map&lt;String, SnapshotDirectoryInfo&gt; known = new HashMap&lt;String, SnapshotDirectoryInfo&gt;();<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // 3. check each of the snapshot directories<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    FileStatus[] snapshots = FSUtils.listStatus(fs, snapshotDir);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    if (snapshots == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // remove all the remembered snapshots because we don't have any left<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (LOG.isDebugEnabled() &amp;&amp; this.snapshots.size() &gt; 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("No snapshots on-disk, cache empty");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      this.snapshots.clear();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // 3.1 iterate through the on-disk snapshots<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    for (FileStatus snapshot : snapshots) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      String name = snapshot.getPath().getName();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // its not the tmp dir,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (!name.equals(SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME)) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        SnapshotDirectoryInfo files = this.snapshots.remove(name);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        // 3.1.1 if we don't know about the snapshot or its been modified, we need to update the<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // files the latter could occur where I create a snapshot, then delete it, and then make a<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        // new snapshot with the same name. We will need to update the cache the information from<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        // that new snapshot, even though it has the same name as the files referenced have<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        // probably changed.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        if (files == null || files.hasBeenModified(snapshot.getModificationTime())) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          // get all files for the snapshot and create a new info<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          Collection&lt;String&gt; storedFiles = fileInspector.filesUnderSnapshot(snapshot.getPath());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          files = new SnapshotDirectoryInfo(snapshot.getModificationTime(), storedFiles);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        // 3.2 add all the files to cache<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        this.cache.addAll(files.getFiles());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        known.put(name, files);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // 4. set the snapshots we are tracking<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    this.snapshots.clear();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.snapshots.putAll(known);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  @VisibleForTesting List&lt;String&gt; getSnapshotsInProgress(<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    final SnapshotManager snapshotManager) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    List&lt;String&gt; snapshotInProgress = Lists.newArrayList();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    // only add those files to the cache, but not to the known snapshots<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    Path snapshotTmpDir = new Path(snapshotDir, SnapshotDescriptionUtils.SNAPSHOT_TMP_DIR_NAME);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // only add those files to the cache, but not to the known snapshots<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    FileStatus[] running = FSUtils.listStatus(fs, snapshotTmpDir);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (running != null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      for (FileStatus run : running) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ReentrantLock lock = null;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        if (snapshotManager != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          lock = snapshotManager.getLocks().acquireLock(run.getPath().getName());<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          snapshotInProgress.addAll(fileInspector.filesUnderSnapshot(run.getPath()));<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        } catch (CorruptedSnapshotException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          // See HBASE-16464<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          if (e.getCause() instanceof FileNotFoundException) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>            // If the snapshot is corrupt, we will delete it<a name="line.316"></a>
+<span class="sourceLineNo">317</span>            fs.delete(run.getPath(), true);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            LOG.warn("delete the " + run.getPath() + " due to exception:", e.getCause());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>            throw e;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        } finally {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          if (lock != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            lock.unlock();<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>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return snapshotInProgress;<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>  /**<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * Simple helper task that just periodically attempts to refresh the cache<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  public class RefreshCacheTask extends TimerTask {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    @Override<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    public void run() {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      try {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        SnapshotFileCache.this.refreshCache();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        LOG.warn("Failed to refresh snapshot hfile cache!", e);<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  @Override<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public boolean isStopped() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return this.stop;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Information about a snapshot directory<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private static class SnapshotDirectoryInfo {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long lastModified;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Collection&lt;String&gt; files;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.lastModified = mtime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      this.files = files;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    /**<a name="line.364"></a>
-<span class="sourceLineNo">365</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>     */<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public Collection&lt;String&gt; getFiles() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.files;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * Check if the snapshot directory has been modified<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     * @param mtime current modification time of the directory<a name="line.373"></a>
-<span class="sourceLineNo">374</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.374"></a>
-<span class="sourceLineNo">375</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>     */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    public boolean hasBeenModified(long mtime) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return this.lastModified &lt; mtime;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>}<a name="line.381"></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>  @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public void stop(String why) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    if (!this.stop) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.stop = true;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      this.refreshTimer.cancel();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  public boolean isStopped() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return this.stop;<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>   * Information about a snapshot directory<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private static class SnapshotDirectoryInfo {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    long lastModified;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    Collection&lt;String&gt; files;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public SnapshotDirectoryInfo(long mtime, Collection&lt;String&gt; files) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      this.lastModified = mtime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      this.files = files;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    /**<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @return the hfiles in the snapshot when &lt;tt&gt;this&lt;/tt&gt; was made.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public Collection&lt;String&gt; getFiles() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return this.files;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>    /**<a name="line.379"></a>
+<span class="sourceLineNo">380</span>     * Check if the snapshot directory has been modified<a name="line.380"></a>
+<span class="sourceLineNo">381</span>     * @param mtime current modification time of the directory<a name="line.381"></a>
+<span class="sourceLineNo">382</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it the modification time of the directory is newer time when we<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     *         created &lt;tt&gt;this&lt;/tt&gt;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    public boolean hasBeenModified(long mtime) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      return this.lastModified &lt; mtime;<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>
 
 
 


[40/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index ef4433c..3712977 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -114,7 +114,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.LimitedPrivate</a>(<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html#value()">value</a>="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.195">HMaster</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.196">HMaster</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></pre>
 <div class="block">HMaster is the "master server" for HBase. An HBase cluster has one active
@@ -1231,7 +1231,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.196">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.197">LOG</a></pre>
 </li>
 </ul>
 <a name="MASTER">
@@ -1240,7 +1240,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.252">MASTER</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.253">MASTER</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.MASTER">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1250,7 +1250,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>activeMasterManager</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.255">activeMasterManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.256">activeMasterManager</a></pre>
 </li>
 </ul>
 <a name="regionServerTracker">
@@ -1259,7 +1259,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.257">regionServerTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.258">regionServerTracker</a></pre>
 </li>
 </ul>
 <a name="drainingServerTracker">
@@ -1268,7 +1268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>drainingServerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.259">drainingServerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.260">drainingServerTracker</a></pre>
 </li>
 </ul>
 <a name="loadBalancerTracker">
@@ -1277,7 +1277,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>loadBalancerTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.261">loadBalancerTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.262">loadBalancerTracker</a></pre>
 </li>
 </ul>
 <a name="splitOrMergeTracker">
@@ -1286,7 +1286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitOrMergeTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.264">splitOrMergeTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.265">splitOrMergeTracker</a></pre>
 </li>
 </ul>
 <a name="regionNormalizerTracker">
@@ -1295,7 +1295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionNormalizerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.267">regionNormalizerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.268">regionNormalizerTracker</a></pre>
 </li>
 </ul>
 <a name="maintenanceModeTracker">
@@ -1304,7 +1304,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>maintenanceModeTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterMaintenanceModeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.270">maintenanceModeTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterMaintenanceModeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.271">maintenanceModeTracker</a></pre>
 </li>
 </ul>
 <a name="clusterSchemaService">
@@ -1313,7 +1313,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterSchemaService</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.272">clusterSchemaService</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.273">clusterSchemaService</a></pre>
 </li>
 </ul>
 <a name="metricsMaster">
@@ -1322,7 +1322,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsMaster</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.275">metricsMaster</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.276">metricsMaster</a></pre>
 </li>
 </ul>
 <a name="fileSystemManager">
@@ -1331,7 +1331,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>fileSystemManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.277">fileSystemManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.278">fileSystemManager</a></pre>
 </li>
 </ul>
 <a name="walManager">
@@ -1340,7 +1340,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>walManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.278">walManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.279">walManager</a></pre>
 </li>
 </ul>
 <a name="serverManager">
@@ -1349,7 +1349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serverManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.281">serverManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.282">serverManager</a></pre>
 </li>
 </ul>
 <a name="assignmentManager">
@@ -1358,7 +1358,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.284">assignmentManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.285">assignmentManager</a></pre>
 </li>
 </ul>
 <a name="rsFatals">
@@ -1367,7 +1367,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>rsFatals</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.289">rsFatals</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.290">rsFatals</a></pre>
 </li>
 </ul>
 <a name="isActiveMaster">
@@ -1376,7 +1376,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isActiveMaster</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.292">isActiveMaster</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.293">isActiveMaster</a></pre>
 </li>
 </ul>
 <a name="initialized">
@@ -1385,7 +1385,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initialized</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.ProcedureEvent.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureScheduler.ProcedureEvent</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.296">initialized</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.ProcedureEvent.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureScheduler.ProcedureEvent</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.297">initialized</a></pre>
 </li>
 </ul>
 <a name="serviceStarted">
@@ -1394,7 +1394,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serviceStarted</h4>
-<pre>volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.300">serviceStarted</a></pre>
+<pre>volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.301">serviceStarted</a></pre>
 </li>
 </ul>
 <a name="serverCrashProcessingEnabled">
@@ -1403,7 +1403,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serverCrashProcessingEnabled</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.ProcedureEvent.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureScheduler.ProcedureEvent</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.303">serverCrashProcessingEnabled</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.ProcedureEvent.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureScheduler.ProcedureEvent</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.304">serverCrashProcessingEnabled</a></pre>
 </li>
 </ul>
 <a name="balancer">
@@ -1412,7 +1412,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balancer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.306">balancer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.307">balancer</a></pre>
 </li>
 </ul>
 <a name="normalizer">
@@ -1421,7 +1421,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.307">normalizer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.308">normalizer</a></pre>
 </li>
 </ul>
 <a name="balancerChore">
@@ -1430,7 +1430,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balancerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.308">balancerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.309">balancerChore</a></pre>
 </li>
 </ul>
 <a name="normalizerChore">
@@ -1439,7 +1439,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.309">normalizerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.310">normalizerChore</a></pre>
 </li>
 </ul>
 <a name="clusterStatusChore">
@@ -1448,7 +1448,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.310">clusterStatusChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.311">clusterStatusChore</a></pre>
 </li>
 </ul>
 <a name="clusterStatusPublisherChore">
@@ -1457,7 +1457,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusPublisherChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.311">clusterStatusPublisherChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.312">clusterStatusPublisherChore</a></pre>
 </li>
 </ul>
 <a name="periodicDoMetricsChore">
@@ -1466,7 +1466,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicDoMetricsChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html" title="class in org.apache.hadoop.hbase.master">HMaster.PeriodicDoMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.312">periodicDoMetricsChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html" title="class in org.apache.hadoop.hbase.master">HMaster.PeriodicDoMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.313">periodicDoMetricsChore</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorChore">
@@ -1475,7 +1475,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>catalogJanitorChore</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.314">catalogJanitorChore</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.315">catalogJanitorChore</a></pre>
 </li>
 </ul>
 <a name="replicationZKLockCleanerChore">
@@ -1484,7 +1484,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationZKLockCleanerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationZKLockCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationZKLockCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.315">replicationZKLockCleanerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationZKLockCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationZKLockCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.316">replicationZKLockCleanerChore</a></pre>
 </li>
 </ul>
 <a name="replicationMetaCleaner">
@@ -1493,7 +1493,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationMetaCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationMetaCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationMetaCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.316">replicationMetaCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationMetaCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationMetaCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.317">replicationMetaCleaner</a></pre>
 </li>
 </ul>
 <a name="logCleaner">
@@ -1502,7 +1502,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>logCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.317">logCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.318">logCleaner</a></pre>
 </li>
 </ul>
 <a name="hfileCleaner">
@@ -1511,7 +1511,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>hfileCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.318">hfileCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.319">hfileCleaner</a></pre>
 </li>
 </ul>
 <a name="expiredMobFileCleanerChore">
@@ -1520,7 +1520,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>expiredMobFileCleanerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.master">ExpiredMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.319">expiredMobFileCleanerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.master">ExpiredMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.320">expiredMobFileCleanerChore</a></pre>
 </li>
 </ul>
 <a name="mobCompactChore">
@@ -1529,7 +1529,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.320">mobCompactChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.321">mobCompactChore</a></pre>
 </li>
 </ul>
 <a name="mobCompactThread">
@@ -1538,7 +1538,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactThread</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html" title="class in org.apache.hadoop.hbase.master">MasterMobCompactionThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.321">mobCompactThread</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html" title="class in org.apache.hadoop.hbase.master">MasterMobCompactionThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.322">mobCompactThread</a></pre>
 </li>
 </ul>
 <a name="mobCompactionLock">
@@ -1547,7 +1547,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactionLock</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.323">mobCompactionLock</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.324">mobCompactionLock</a></pre>
 </li>
 </ul>
 <a name="mobCompactionStates">
@@ -1556,7 +1556,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactionStates</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.326">mobCompactionStates</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.327">mobCompactionStates</a></pre>
 </li>
 </ul>
 <a name="cpHost">
@@ -1565,7 +1565,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>cpHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.328">cpHost</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.329">cpHost</a></pre>
 </li>
 </ul>
 <a name="preLoadTableDescriptors">
@@ -1574,7 +1574,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>preLoadTableDescriptors</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.330">preLoadTableDescriptors</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.331">preLoadTableDescriptors</a></pre>
 </li>
 </ul>
 <a name="masterActiveTime">
@@ -1583,7 +1583,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterActiveTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.333">masterActiveTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.334">masterActiveTime</a></pre>
 </li>
 </ul>
 <a name="masterCheckCompression">
@@ -1592,7 +1592,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterCheckCompression</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.336">masterCheckCompression</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.337">masterCheckCompression</a></pre>
 </li>
 </ul>
 <a name="masterCheckEncryption">
@@ -1601,7 +1601,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterCheckEncryption</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.339">masterCheckEncryption</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.340">masterCheckEncryption</a></pre>
 </li>
 </ul>
 <a name="coprocessorServiceHandlers">
@@ -1610,7 +1610,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorServiceHandlers</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.341">coprocessorServiceHandlers</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.342">coprocessorServiceHandlers</a></pre>
 </li>
 </ul>
 <a name="snapshotManager">
@@ -1619,7 +1619,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.344">snapshotManager</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.345">snapshotManager</a></pre>
 </li>
 </ul>
 <a name="mpmHost">
@@ -1628,7 +1628,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mpmHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.346">mpmHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.347">mpmHost</a></pre>
 </li>
 </ul>
 <a name="quotaManager">
@@ -1637,7 +1637,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>quotaManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.349">quotaManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.350">quotaManager</a></pre>
 </li>
 </ul>
 <a name="procedureExecutor">
@@ -1646,7 +1646,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureExecutor</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.351">procedureExecutor</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.352">procedureExecutor</a></pre>
 </li>
 </ul>
 <a name="procedureStore">
@@ -1655,7 +1655,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureStore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.352">procedureStore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.353">procedureStore</a></pre>
 </li>
 </ul>
 <a name="tableStateManager">
@@ -1664,7 +1664,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>tableStateManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.355">tableStateManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.356">tableStateManager</a></pre>
 </li>
 </ul>
 <a name="splitPlanCount">
@@ -1673,7 +1673,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitPlanCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.357">splitPlanCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.358">splitPlanCount</a></pre>
 </li>
 </ul>
 <a name="mergePlanCount">
@@ -1682,7 +1682,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mergePlanCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.358">mergePlanCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.359">mergePlanCount</a></pre>
 </li>
 </ul>
 <a name="initializationBeforeMetaAssignment">
@@ -1691,7 +1691,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initializationBeforeMetaAssignment</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.361">initializationBeforeMetaAssignment</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.362">initializationBeforeMetaAssignment</a></pre>
 <div class="block">flag used in test cases in order to simulate RS failures during master initialization</div>
 </li>
 </ul>
@@ -1701,7 +1701,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockListLast">
 <li class="blockList">
 <h4>masterJettyServer</h4>
-<pre>private&nbsp;org.mortbay.jetty.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.364">masterJettyServer</a></pre>
+<pre>private&nbsp;org.mortbay.jetty.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.365">masterJettyServer</a></pre>
 <div class="block">jetty server for master to redirect requests to regionserver infoServer</div>
 </li>
 </ul>
@@ -1719,7 +1719,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HMaster</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.405">HMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.406">HMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
        <a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a>&nbsp;csm)
         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                org.apache.zookeeper.KeeperException</pre>
@@ -1752,7 +1752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>putUpJettyServer</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.468">putUpJettyServer</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.469">putUpJettyServer</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1764,7 +1764,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getFsTableDescriptors</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.509">getFsTableDescriptors</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.510">getFsTableDescriptors</a>()
                                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -1779,7 +1779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.517">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.518">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">For compatibility, if failed with regionserver credentials, try the master one</div>
@@ -1796,7 +1796,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMasterActive</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.532">waitForMasterActive</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.533">waitForMasterActive</a>()</pre>
 <div class="block">If configured to put regions on active master,
  wait till a backup master becomes active.
  Otherwise, loop till the server is stopped or aborted.</div>
@@ -1812,7 +1812,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.541">getMasterRpcServices</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.542">getMasterRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="balanceSwitch(boolean)">
@@ -1821,7 +1821,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceSwitch</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.545">balanceSwitch</a>(boolean&nbsp;b)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.546">balanceSwitch</a>(boolean&nbsp;b)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1833,7 +1833,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcessName</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.550">getProcessName</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.551">getProcessName</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getProcessName()">getProcessName</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -1846,7 +1846,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>canCreateBaseZNode</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.555">canCreateBaseZNode</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.556">canCreateBaseZNode</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode()">canCreateBaseZNode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -1859,7 +1859,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>canUpdateTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.560">canUpdateTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.561">canUpdateTableDescriptor</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canUpdateTableDescriptor()">canUpdateTableDescriptor</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -1872,7 +1872,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createRpcServices</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.565">createRpcServices</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.566">createRpcServices</a>()
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -1887,7 +1887,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>configureInfoServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.570">configureInfoServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.571">configureInfoServer</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#configureInfoServer()">configureInfoServer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -1900,7 +1900,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getDumpServlet</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.579">getDumpServlet</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.580">getDumpServlet</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDumpServlet()">getDumpServlet</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -1913,7 +1913,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>doMetrics</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.587">doMetrics</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.588">doMetrics</a>()</pre>
 <div class="block">Emit the HMaster metrics, such as region in transition metrics.
  Surrounding in a try block just to be sure metrics doesn't abort HMaster.</div>
 </li>
@@ -1924,7 +1924,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterMetrics</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.597">getMasterMetrics</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.598">getMasterMetrics</a>()</pre>
 </li>
 </ul>
 <a name="initializeZKBasedSystemTrackers()">
@@ -1933,7 +1933,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeZKBasedSystemTrackers</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.604">initializeZKBasedSystemTrackers</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.605">initializeZKBasedSystemTrackers</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                       org.apache.zookeeper.KeeperException,
@@ -1952,7 +1952,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>finishActiveMasterInitialization</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.667">finishActiveMasterInitialization</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.668">finishActiveMasterInitialization</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                               org.apache.zookeeper.KeeperException,
@@ -1983,7 +1983,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initMobCleaner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.847">initMobCleaner</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.848">initMobCleaner</a>()</pre>
 </li>
 </ul>
 <a name="createMetaBootstrap(org.apache.hadoop.hbase.master.HMaster, org.apache.hadoop.hbase.monitoring.MonitoredTask)">
@@ -1992,7 +1992,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createMetaBootstrap</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.866">createMetaBootstrap</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master,
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.867">createMetaBootstrap</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master,
                                       <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)</pre>
 <div class="block">Create a <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master"><code>MasterMetaBootstrap</code></a> instance.</div>
 </li>
@@ -2003,7 +2003,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createServerManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.875">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.876">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -2016,7 +2016,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForRegionServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.882">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.883">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -2030,7 +2030,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initClusterSchemaService</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.895">initClusterSchemaService</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.896">initClusterSchemaService</a>()
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -2044,7 +2044,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initQuotaManager</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.901">initQuotaManager</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.902">initQuotaManager</a>()
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2056,7 +2056,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogJanitorEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.908">isCatalogJanitorEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.909">isCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getTableDescriptors()">
@@ -2065,7 +2065,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.914">getTableDescriptors</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.915">getTableDescriptors</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getTableDescriptors()">getTableDescriptors</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2080,7 +2080,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.919">getServerManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.920">getServerManager</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getServerManager()">getServerManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2093,7 +2093,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFileSystem</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.924">getMasterFileSystem</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.925">getMasterFileSystem</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterFileSystem()">getMasterFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2106,7 +2106,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterWalManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.929">getMasterWalManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.930">getMasterWalManager</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterWalManager()">getMasterWalManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2119,7 +2119,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.934">getTableStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.935">getTableStateManager</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getTableStateManager()">getTableStateManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2132,7 +2132,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startServiceThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.945">startServiceThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.946">startServiceThreads</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2144,7 +2144,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>sendShutdownInterrupt</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.999">sendShutdownInterrupt</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1002">sendShutdownInterrupt</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#sendShutdownInterrupt()">HRegionServer</a></code></strong></div>
 <div class="block">Called on stop/abort before closing the cluster connection and meta locator.</div>
 <dl>
@@ -2159,7 +2159,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1005">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1008">stopServiceThreads</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stopServiceThreads()">HRegionServer</a></code></strong></div>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
@@ -2175,7 +2175,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1040">startProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1043">startProcedureExecutor</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2187,7 +2187,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1061">stopProcedureExecutor</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1064">stopProcedureExecutor</a>()</pre>
 </li>
 </ul>
 <a name="stopChores()">
@@ -2196,7 +2196,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopChores</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1071">stopChores</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1074">stopChores</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteInetAddress(int, long)">
@@ -2205,7 +2205,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteInetAddress</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1105">getRemoteInetAddress</a>(int&nbsp;port,
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1108">getRemoteInetAddress</a>(int&nbsp;port,
                                long&nbsp;serverStartCode)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Get remote side's InetAddress</dd>
@@ -2219,7 +2219,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getBalancerCutoffTime</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1125">getBalancerCutoffTime</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1128">getBalancerCutoffTime</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Maximum time we should run balancer for</dd></dl>
 </li>
 </ul>
@@ -2229,7 +2229,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1135">balance</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1138">balance</a>()
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2241,7 +2241,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1139">balance</a>(boolean&nbsp;force)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1142">balance</a>(boolean&nbsp;force)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2253,7 +2253,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNormalizer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1237">getRegionNormalizer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1240">getRegionNormalizer</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionNormalizer()">getRegionNormalizer</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2266,7 +2266,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizeRegions</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1248">normalizeRegions</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1251">normalizeRegions</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Perform normalization of cluster (invoked by <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer"><code>RegionNormalizerChore</code></a>).</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if normalization step was performed successfully, false otherwise
@@ -2282,7 +2282,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClientIdAuditPrefix</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1305">getClientIdAuditPrefix</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1308">getClientIdAuditPrefix</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Client info for use as prefix on an audit log string; who did an action</dd></dl>
 </li>
 </ul>
@@ -2292,7 +2292,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1315">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1318">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
 <div class="block">Switch for the background CatalogJanitor thread.
  Used for testing.  The thread will continue to run.  It will just be a noop
  if disabled.</div>
@@ -2305,7 +2305,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>dispatchMergingRegions</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1320">dispatchMergingRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfoA,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1323">dispatchMergingRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfoA,
                           <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfoB,
                           boolean&nbsp;forcible,
                           long&nbsp;nonceGroup,
@@ -2330,7 +2330,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>move</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1365">move</a>(byte[]&nbsp;encodedRegionName,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1368">move</a>(byte[]&nbsp;encodedRegionName,
         byte[]&nbsp;destServerName)
     throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -2343,7 +2343,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1442">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1445">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
                byte[][]&nbsp;splitKeys,
                long&nbsp;nonceGroup,
                long&nbsp;nonce)
@@ -2364,7 +2364,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createSystemTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1480">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1483">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#createSystemTable(org.apache.hadoop.hbase.HTableDescriptor)">MasterServices</a></code></strong></div>
 <div class="block">Create a system table using the given table definition.</div>
@@ -2383,7 +2383,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>sanityCheckTableDescriptor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1508">sanityCheckTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1511">sanityCheckTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Checks whether the table conforms to some sane limits, and configured
  values (compression, etc) work. Throws an exception if something is wrong.</div>
@@ -2397,7 +2397,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReplicationScope</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1623">checkReplicationScope</a>(<a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;hcd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1626">checkReplicationScope</a>(<a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;hcd)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -2409,7 +2409,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompactionPolicy</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1635">checkCompactionPolicy</a>(org.apache.hadoop.co

<TRUNCATED>

[38/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
index 0dfefa0..263463b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html
@@ -101,7 +101,7 @@
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
 <a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Evolving</a>
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.77">SnapshotFileCache</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.78">SnapshotFileCache</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">Intelligently keep track of all the files for all the snapshots.
@@ -270,11 +270,12 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getSnapshotsInProgress()">getSnapshotsInProgress</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getSnapshotsInProgress(org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">getSnapshotsInProgress</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getUnreferencedFiles(java.lang.Iterable)">getUnreferencedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</code>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getUnreferencedFiles(java.lang.Iterable,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">getUnreferencedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
+                                        <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>
 <div class="block">Check to see if any of the passed file names is contained in any of the snapshots.</div>
 </td>
 </tr>
@@ -326,7 +327,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.87">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.88">LOG</a></pre>
 </li>
 </ul>
 <a name="stop">
@@ -335,7 +336,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.88">stop</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.89">stop</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -344,7 +345,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.89">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.90">fs</a></pre>
 </li>
 </ul>
 <a name="fileInspector">
@@ -353,7 +354,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>fileInspector</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.90">fileInspector</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.91">fileInspector</a></pre>
 </li>
 </ul>
 <a name="snapshotDir">
@@ -362,7 +363,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.91">snapshotDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.92">snapshotDir</a></pre>
 </li>
 </ul>
 <a name="cache">
@@ -371,7 +372,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>cache</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.92">cache</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.93">cache</a></pre>
 </li>
 </ul>
 <a name="snapshots">
@@ -380,7 +381,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshots</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotDirectoryInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.97">snapshots</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotDirectoryInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.98">snapshots</a></pre>
 <div class="block">This is a helper map of information about the snapshot directories so we don't need to rescan
  them if they haven't changed since the last time we looked.</div>
 </li>
@@ -391,7 +392,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshTimer</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.99">refreshTimer</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.100">refreshTimer</a></pre>
 </li>
 </ul>
 <a name="lastModifiedTime">
@@ -400,7 +401,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lastModifiedTime</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.101">lastModifiedTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.102">lastModifiedTime</a></pre>
 </li>
 </ul>
 </li>
@@ -417,7 +418,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SnapshotFileCache</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.115">SnapshotFileCache</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.116">SnapshotFileCache</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  long&nbsp;cacheRefreshPeriod,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;refreshThreadName,
                  <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a>&nbsp;inspectSnapshotFiles)
@@ -438,7 +439,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotFileCache</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.131">SnapshotFileCache</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.132">SnapshotFileCache</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                  org.apache.hadoop.fs.Path&nbsp;rootDir,
                  long&nbsp;cacheRefreshPeriod,
                  long&nbsp;cacheRefreshDelay,
@@ -463,7 +464,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerCacheRefreshForTesting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.150">triggerCacheRefreshForTesting</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.151">triggerCacheRefreshForTesting</a>()</pre>
 <div class="block">Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending
  cache refreshes.
  <p>
@@ -472,13 +473,14 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
  Exposed for TESTING.</div>
 </li>
 </ul>
-<a name="getUnreferencedFiles(java.lang.Iterable)">
+<a name="getUnreferencedFiles(java.lang.Iterable, org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getUnreferencedFiles</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.180">getUnreferencedFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.181">getUnreferencedFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
+                                                             <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)
                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check to see if any of the passed file names is contained in any of the snapshots.
  First checks an in-memory cache of the files to keep. If its not in the cache, then the cache
@@ -505,19 +507,19 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.205">refreshCache</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.207">refreshCache</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
-<a name="getSnapshotsInProgress()">
+<a name="getSnapshotsInProgress(org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotsInProgress</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotFileCache.html#line.296">getSnapshotsInProgress</a>()
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotFileCache.html#line.298">getSnapshotsInProgress</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -529,7 +531,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.339">stop</a>(<a href="http://docs.oracle.com/javase/7/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/snapshot/SnapshotFileCache.html#line.347">stop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop(java.lang.String)">Stoppable</a></code></strong></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -545,7 +547,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.348">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.356">isStopped</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
index f3f3dcf..eae06ad 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html
@@ -116,7 +116,7 @@
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.LimitedPrivate</a>(<a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html#value()">value</a>="Configuration")
 <a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Evolving</a>
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.44">SnapshotHFileCleaner</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.47">SnapshotHFileCleaner</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseHFileCleanerDelegate</a></pre>
 <div class="block">Implementation of a file cleaner that checks if a hfile is still used by snapshots of HBase
  tables.</div>
@@ -161,6 +161,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#master">master</a></strong></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -206,20 +210,26 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#init(java.util.Map)">init</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>
+<div class="block">this method is used to pass some instance into subclass</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#isFileDeletable(org.apache.hadoop.fs.FileStatus)">isFileDeletable</a></strong>(org.apache.hadoop.fs.FileStatus&nbsp;fStat)</code>
 <div class="block">Should the master delete the file or keep it?</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#isStopped()">isStopped</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#setConf(org.apache.hadoop.conf.Configuration)">setConf</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#stop(java.lang.String)">stop</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</code>
 <div class="block">Stop this service.</div>
@@ -267,7 +277,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.45">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.48">LOG</a></pre>
 </li>
 </ul>
 <a name="HFILE_CACHE_REFRESH_PERIOD_CONF_KEY">
@@ -276,7 +286,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_CACHE_REFRESH_PERIOD_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.51">HFILE_CACHE_REFRESH_PERIOD_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.54">HFILE_CACHE_REFRESH_PERIOD_CONF_KEY</a></pre>
 <div class="block">Conf key for the frequency to attempt to refresh the cache of hfiles currently used in
  snapshots (ms)</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.HFILE_CACHE_REFRESH_PERIOD_CONF_KEY">Constant Field Values</a></dd></dl>
@@ -288,7 +298,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HFILE_CACHE_REFRESH_PERIOD</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.55">DEFAULT_HFILE_CACHE_REFRESH_PERIOD</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.58">DEFAULT_HFILE_CACHE_REFRESH_PERIOD</a></pre>
 <div class="block">Refresh cache, by default, every 5 minutes</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.DEFAULT_HFILE_CACHE_REFRESH_PERIOD">Constant Field Values</a></dd></dl>
 </li>
@@ -296,13 +306,22 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <a name="cache">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>cache</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.58">cache</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.61">cache</a></pre>
 <div class="block">File cache for HFiles in the completed and currently running snapshots</div>
 </li>
 </ul>
+<a name="master">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>master</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.63">master</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -317,7 +336,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotHFileCleaner</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.44">SnapshotHFileCleaner</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.47">SnapshotHFileCleaner</a>()</pre>
 </li>
 </ul>
 </li>
@@ -334,7 +353,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeletableFiles</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.61">getDeletableFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.66">getDeletableFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">FileCleanerDelegate</a></code></strong></div>
 <div class="block">Determines which of the given files are safe to delete</div>
 <dl>
@@ -346,13 +365,30 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <dt><span class="strong">Returns:</span></dt><dd>files that are ok to delete according to this cleaner</dd></dl>
 </li>
 </ul>
+<a name="init(java.util.Map)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>init</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.78">init</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#init(java.util.Map)">FileCleanerDelegate</a></code></strong></div>
+<div class="block">this method is used to pass some instance into subclass</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#init(java.util.Map)">init</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner">FileCleanerDelegate</a></code></dd>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="isFileDeletable(org.apache.hadoop.fs.FileStatus)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isFileDeletable</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.73">isFileDeletable</a>(org.apache.hadoop.fs.FileStatus&nbsp;fStat)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.85">isFileDeletable</a>(org.apache.hadoop.fs.FileStatus&nbsp;fStat)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#isFileDeletable(org.apache.hadoop.fs.FileStatus)">BaseFileCleanerDelegate</a></code></strong></div>
 <div class="block">Should the master delete the file or keep it?</div>
 <dl>
@@ -368,7 +404,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>setConf</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.77">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.89">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>setConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -383,7 +419,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.97">stop</a>(<a href="http://docs.oracle.com/javase/7/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/snapshot/SnapshotHFileCleaner.html#line.110">stop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop(java.lang.String)">Stoppable</a></code></strong></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -401,7 +437,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.102">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.115">isStopped</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>
@@ -416,7 +452,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getFileCacheForTesting</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.110">getFileCacheForTesting</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#line.123">getFileCacheForTesting</a>()</pre>
 <div class="block">Exposed for Testing!</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the cache of all hfiles</dd></dl>
 </li>


[16/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index 32277da..2b5c301 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -43,2833 +43,2836 @@
 <span class="sourceLineNo">035</span>import java.util.Collection;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.Collections;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import java.util.Comparator;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Iterator;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.Map;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Map.Entry;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.Set;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CountDownLatch;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.TimeUnit;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.regex.Pattern;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>import javax.servlet.ServletException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import javax.servlet.http.HttpServlet;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import javax.servlet.http.HttpServletRequest;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import javax.servlet.http.HttpServletResponse;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.commons.logging.Log;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.commons.logging.LogFactory;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.conf.Configuration;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CoordinatedStateException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HConstants;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ProcedureInfo;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.RegionStateListener;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerLoad;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Result;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.coprocessor.BypassCoprocessorException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationMetaCleaner;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationZKLockCleanerChore;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.procedure.DeleteColumnFamilyProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.procedure.DispatchMergingRegionsProcedure;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.ProcedureEvent;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.procedure.ModifyColumnFamilyProcedure;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.replication.ReplicationQueuesZKImpl;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.replication.master.TableCFsUpdater;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.replication.regionserver.Replication;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.util.ZKDataMigrator;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.zookeeper.DrainingServerTracker;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.zookeeper.MasterMaintenanceModeTracker;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.zookeeper.RegionServerTracker;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.zookeeper.KeeperException;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.mortbay.jetty.Connector;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.mortbay.jetty.nio.SelectChannelConnector;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.mortbay.jetty.servlet.Context;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * run the cluster.  All others park themselves in their constructor until<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> *<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> *<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> *<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @see org.apache.zookeeper.Watcher<a name="line.191"></a>
-<span class="sourceLineNo">192</span> */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@SuppressWarnings("deprecation")<a name="line.194"></a>
-<span class="sourceLineNo">195</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  private static final Log LOG = LogFactory.getLog(HMaster.class.getName());<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static class InitializationMonitor extends HasThread {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * true, do nothing otherwise.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public static final boolean HALT_DEFAULT = false;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private final HMaster master;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private final long timeout;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private final boolean haltOnTimeout;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    InitializationMonitor(HMaster master) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      super("MasterInitializationMonitor");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      this.master = master;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      this.setDaemon(true);<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>    @Override<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    public void run() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          Thread.sleep(timeout);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          if (master.isInitialized()) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            if (haltOnTimeout) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  //instance into web context.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public static final String MASTER = "master";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  // Manager and zk listener for master election<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private final ActiveMasterManager activeMasterManager;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  // Region server tracker<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  RegionServerTracker regionServerTracker;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  // Draining region server tracker<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private DrainingServerTracker drainingServerTracker;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  // Tracker for load balancer state<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  // Tracker for split and merge state<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  // Tracker for region normalizer state<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  //Tracker for master maintenance mode setting<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private ClusterSchemaService clusterSchemaService;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  // Metrics for the HMaster<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  final MetricsMaster metricsMaster;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // file system manager for the master FS operations<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private MasterFileSystem fileSystemManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  private MasterWalManager walManager;<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // server manager to deal with region server info<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private volatile ServerManager serverManager;<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // manager of assignment nodes in zookeeper<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private AssignmentManager assignmentManager;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  // buffer for "fatal error" notices from region servers<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  // in the cluster. This is only used for assisting<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // operations/debugging.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // flag set after we become the active master (used for testing)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private volatile boolean isActiveMaster = false;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  // flag set after we complete initialization once active,<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  // it is not private since it's used in unit tests<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  // flag set after master services are started,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  // initialization may have not completed yet.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  volatile boolean serviceStarted = false;<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  // flag set after we complete assignMeta.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private final ProcedureEvent serverCrashProcessingEnabled =<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    new ProcedureEvent("server crash processing");<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  private LoadBalancer balancer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  private RegionNormalizer normalizer;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private BalancerChore balancerChore;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private RegionNormalizerChore normalizerChore;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private ClusterStatusChore clusterStatusChore;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private PeriodicDoMetrics periodicDoMetricsChore = null;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  CatalogJanitor catalogJanitorChore;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private ReplicationZKLockCleanerChore replicationZKLockCleanerChore;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  private ReplicationMetaCleaner replicationMetaCleaner;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private LogCleaner logCleaner;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private HFileCleaner hfileCleaner;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private MobCompactionChore mobCompactChore;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // used to synchronize the mobCompactionStates<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  // save the information of mob compactions in tables.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  MasterCoprocessorHost cpHost;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private final boolean preLoadTableDescriptors;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Time stamps for when a hmaster became active<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private long masterActiveTime;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final boolean masterCheckCompression;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  //should we check encryption settings at master side, default true<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private final boolean masterCheckEncryption;<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // monitor for snapshot of hbase tables<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  SnapshotManager snapshotManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // monitor for distributed procedures<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private MasterProcedureManagerHost mpmHost;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private volatile MasterQuotaManager quotaManager;<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private WALProcedureStore procedureStore;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // handle table states<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private TableStateManager tableStateManager;<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private long splitPlanCount;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  private long mergePlanCount;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  /** flag used in test cases in order to simulate RS failures during master initialization */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private volatile boolean initializationBeforeMetaAssignment = false;<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private org.mortbay.jetty.Server masterJettyServer;<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static class RedirectServlet extends HttpServlet {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    private static final long serialVersionUID = 2894774810058302472L;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    private static int regionServerInfoPort;<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public void doGet(HttpServletRequest request,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      String redirectUrl = request.getScheme() + "://"<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        + request.getServerName() + ":" + regionServerInfoPort<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        + request.getRequestURI();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      response.sendRedirect(redirectUrl);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private static class PeriodicDoMetrics extends ScheduledChore {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private final HMaster server;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    public PeriodicDoMetrics(int doMetricsInterval, final HMaster server) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      super(server.getServerName() + "-DoMetricsChore", server, doMetricsInterval);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      this.server = server;<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>    @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    protected void chore() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      server.doMetrics();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Initializes the HMaster. The steps are as follows:<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * &lt;p&gt;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;ol&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * &lt;li&gt;Initialize the local HRegionServer<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;li&gt;Start the ActiveMasterManager.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;/ol&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * &lt;p&gt;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Remaining steps of initialization occur in<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * the master becomes the active one.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public HMaster(final Configuration conf, CoordinatedStateManager csm)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      throws IOException, KeeperException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    super(conf, csm);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      conf.getLong("hbase.master.buffer.for.rs.fatals", 1*1024*1024));<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    LOG.info("hbase.rootdir=" + FSUtils.getRootDir(this.conf) +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Disable usage of meta replicas in the master<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    Replication.decorateMasterConfiguration(this.conf);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // Hack! Maps DFSClient =&gt; Master for logs.  HDFS made this<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    // config param for task trackers, but we can piggyback off of it.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // should we check encryption settings at master side, default true<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // preload table descriptor at startup<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // Do we publish the status?<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Class&lt;? extends ClusterStatusPublisher.Publisher&gt; publisherClass =<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            ClusterStatusPublisher.Publisher.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (shouldPublish) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (publisherClass == null) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.448"></a>
-<span class="sourceLineNo">449</span>            " is not set - not publishing status");<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      } else {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        getChoreService().scheduleChore(clusterStatusPublisherChore);<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><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      setInitLatch(new CountDownLatch(1));<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      int infoPort = putUpJettyServer();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      startActiveMasterManager(infoPort);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      activeMasterManager = 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><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // return the actual infoPort, -1 means disable info server.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private int putUpJettyServer() throws IOException {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return -1;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    // -1 is for disabling info server, so no redirecting<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    if (infoPort &lt; 0 || infoServer == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      return -1;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String msg =<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          "Failed to start redirecting jetty server. Address " + addr<a name="line.481"></a>
-<span class="sourceLineNo">482</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.482"></a>
-<span class="sourceLineNo">483</span>              + "hbase.master.info.bindAddress";<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      LOG.error(msg);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new IOException(msg);<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>    RedirectServlet.regionServerInfoPort = infoServer.getPort();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if(RedirectServlet.regionServerInfoPort == infoPort) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      return infoPort;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    masterJettyServer = new org.mortbay.jetty.Server();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    Connector connector = new SelectChannelConnector();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    connector.setHost(addr);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    connector.setPort(infoPort);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    masterJettyServer.addConnector(connector);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    masterJettyServer.setStopAtShutdown(true);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Context context = new Context(masterJettyServer, "/", Context.NO_SESSIONS);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    context.addServlet(RedirectServlet.class, "/*");<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    try {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      masterJettyServer.start();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    } catch (Exception e) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      throw new IOException("Failed to start redirecting jetty server", e);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return connector.getLocalPort();<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>  @Override<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    return super.getFsTableDescriptors();<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>  /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * For compatibility, if failed with regionserver credentials, try the master one<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   */<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    try {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      super.login(user, host);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    } catch (IOException ie) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      user.login("hbase.master.keytab.file",<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        "hbase.master.kerberos.principal", host);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<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>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * If configured to put regions on active master,<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * wait till a backup master becomes active.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * Otherwise, loop till the server is stopped or aborted.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   */<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  @Override<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  protected void waitForMasterActive(){<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    boolean tablesOnMaster = BaseLoadBalancer.tablesOnMaster(conf);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    while (!(tablesOnMaster &amp;&amp; isActiveMaster)<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        &amp;&amp; !isStopped() &amp;&amp; !isAborted()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      sleeper.sleep();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public MasterRpcServices getMasterRpcServices() {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return (MasterRpcServices)rpcServices;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  protected String getProcessName() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    return MASTER;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  protected boolean canCreateBaseZNode() {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return true;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  @Override<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  protected boolean canUpdateTableDescriptor() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return true;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return new MasterRpcServices(this);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  protected void configureInfoServer() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    infoServer.setAttribute(MASTER, this);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      super.configureInfoServer();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return MasterDumpServlet.class;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * Emit the HMaster metrics, such as region in transition metrics.<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * Surrounding in a try block just to be sure metrics doesn't abort HMaster.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void doMetrics() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      if (assignmentManager != null) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        assignmentManager.updateRegionsInTransitionMetrics();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    } catch (Throwable e) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      LOG.error("Couldn't update metrics: " + e.getMessage());<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>  MetricsMaster getMasterMetrics() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return metricsMaster;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Initialize all ZK based system trackers.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  void initializeZKBasedSystemTrackers() throws IOException,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      InterruptedException, KeeperException, CoordinatedStateException {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    this.normalizer = RegionNormalizerFactory.getRegionNormalizer(conf);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.normalizer.setMasterServices(this);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    this.normalizer.setMasterRpcServices((MasterRpcServices)rpcServices);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    this.loadBalancerTracker.start();<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    this.regionNormalizerTracker = new RegionNormalizerTracker(zooKeeper, this);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    this.regionNormalizerTracker.start();<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    this.splitOrMergeTracker.start();<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.assignmentManager = new AssignmentManager(this, serverManager,<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      this.balancer, this.service, this.metricsMaster,<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      this.tableLockManager, tableStateManager);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    this.regionServerTracker.start();<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.drainingServerTracker.start();<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    this.maintenanceModeTracker = new MasterMaintenanceModeTracker(zooKeeper);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    this.maintenanceModeTracker.start();<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // going ahead with their startup.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    LOG.info("Server active/primary master=" + this.serverName +<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        ", sessionid=0x" +<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    this.snapshotManager = new SnapshotManager();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    this.mpmHost.register(this.snapshotManager);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    this.mpmHost.loadProcedures(conf);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    this.mpmHost.initialize(this, this.metricsMaster);<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><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;ol&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * &lt;li&gt;Initialize master components - file system manager, server manager,<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   *     assignment manager, region server tracker, etc&lt;/li&gt;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior,<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *     executor services, etc&lt;/li&gt;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;li&gt;Set cluster as UP in ZooKeeper&lt;/li&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;li&gt;Wait for RegionServers to check-in&lt;/li&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * &lt;li&gt;Split logs and perform data recovery, if necessary&lt;/li&gt;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * &lt;li&gt;Ensure assignment of meta/namespace regions&lt;li&gt;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * &lt;li&gt;Handle either fresh cluster start or master failover&lt;/li&gt;<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * &lt;/ol&gt;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  private void finishActiveMasterInitialization(MonitoredTask status)<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      throws IOException, InterruptedException, KeeperException, CoordinatedStateException {<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    isActiveMaster = true;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this));<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    zombieDetector.start();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    /*<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * We are active master now... go initialize components we need to run.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * Note, there may be dross in zk from previous runs; it'll get addressed<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     * below after we determine if cluster startup or failover.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     */<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    status.setStatus("Initializing Master file system");<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    this.fileSystemManager = new MasterFileSystem(this);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    this.walManager = new MasterWalManager(this);<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>    // enable table descriptors cache<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    this.tableDescriptors.setCacheOn();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    // set the META's descriptor to the correct replication<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    this.tableDescriptors.get(TableName.META_TABLE_NAME).setRegionReplication(<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    // warm-up HTDs cache on master initialization<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (preLoadTableDescriptors) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      status.setStatus("Pre-loading table descriptors");<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      this.tableDescriptors.getAll();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>    // publish cluster ID<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    status.setStatus("Publishing Cluster ID in ZooKeeper");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    this.initLatch.countDown();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    this.serverManager = createServerManager(this);<a name="line.703"></a>
-<span class="sourceLineNo">704</span><a name="line.704"></a>
-<span class="sourceLineNo">705</span>    // Invalidate all write locks held previously<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    this.tableLockManager.reapWriteLocks();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.tableStateManager = new TableStateManager(this);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    status.setStatus("Initializing ZK system trackers");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    initializeZKBasedSystemTrackers();<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    // This is for backwards compatibility<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    // See HBASE-11393<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    TableCFsUpdater tableCFsUpdater = new TableCFsUpdater(zooKeeper,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            conf, this.clusterConnection);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    tableCFsUpdater.update();<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    // initialize master side coprocessors before we start handling requests<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    status.setStatus("Initializing master coprocessors");<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    // start up all service threads.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    status.setStatus("Initializing master service threads");<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    startServiceThreads();<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // Wake up this server to check in<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    sleeper.skipSleepCycle();<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Wait for region servers to report in<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    status.setStatus("Wait for region servers to report in");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    waitForRegionServers(status);<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // get a list for previously failed RS which need log splitting work<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // we recover hbase:meta region servers inside master initialization and<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // handle other failed servers in SSH in order to start up master node ASAP<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap(this, status);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    metaBootstrap.splitMetaLogsBeforeAssignment();<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.initializationBeforeMetaAssignment = true;<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>    // Wait for regionserver to finish initialization.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      waitForServerOnline();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>    //initialize load balancer<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    this.balancer.setMasterServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    this.balancer.initialize();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>    // Check if master is shutting down because of some issue<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    // in initializing the regionserver or the balancer.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    if (isStopped()) return;<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    // Make sure meta assigned before proceeding.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    status.setStatus("Assigning Meta Region");<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    metaBootstrap.assignMeta();<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    // check if master is shutting down because above assignMeta could return even hbase:meta isn't<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    // assigned when master is shutting down<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (isStopped()) return;<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>    // migrating existent table state from zk, so splitters<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    // and recovery process treat states properly.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        .queryForTableStates(getZooKeeper()).entrySet()) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      LOG.info("Converting state from zk to new states:" + entry);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      tableStateManager.setTableState(entry.getKey(), entry.getValue());<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    ZKUtil.deleteChildrenRecursively(getZooKeeper(), getZooKeeper().tableZNode);<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>    status.setStatus("Submitting log splitting work for previously failed region servers");<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    metaBootstrap.processDeadServers();<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Fix up assignment manager status<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    status.setStatus("Starting assignment manager");<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    this.assignmentManager.joinCluster();<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>    // set cluster status again after user regions are assigned<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    this.balancerChore = new BalancerChore(this);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    getChoreService().scheduleChore(balancerChore);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    this.catalogJanitorChore = new CatalogJanitor(this, this);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>    // Do Metrics periodically<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    periodicDoMetricsChore = new PeriodicDoMetrics(msgInterval, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    getChoreService().scheduleChore(periodicDoMetricsChore);<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span>    status.setStatus("Starting cluster schema service");<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    initClusterSchemaService();<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>    if (this.cpHost != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        this.cpHost.preMasterInitialization();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      } catch (IOException e) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      }<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>    status.markComplete("Initialization successful");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    LOG.info("Master has completed initialization");<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    configurationManager.registerObserver(this.balancer);<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // Set master as 'initialized'.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    setInitialized(true);<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>    status.setStatus("Assign meta replicas");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    metaBootstrap.assignMetaReplicas();<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>    status.setStatus("Starting quota manager");<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    initQuotaManager();<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    // master initialization. See HBASE-5916.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    status.setStatus("Checking ZNode ACLs");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    initMobCleaner();<a name="line.832"></a>
-<span class="sourceLineNo">833</span><a name="line.833"></a>
-<span class="sourceLineNo">834</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    if (this.cpHost != null) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      // don't let cp initialization errors kill the master<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        this.cpHost.postStartMaster();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      } catch (IOException ioe) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>    zombieDetector.interrupt();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
-<span class="sourceLineNo">846</span><a name="line.846"></a>
-<span class="sourceLineNo">847</span>  private void initMobCleaner() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    } else {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      LOG<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>  /**<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   */<a name="line.865"></a>
-<span class="sourceLineNo">866</span>  MasterMetaBootstrap createMetaBootstrap(final HMaster master, final MonitoredTask status) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    return new MasterMetaBootstrap(master, status);<a name="line.869"></a>
-<span class="sourceLineNo">870</span>  }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>  /**<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * Create a {@link ServerManager} instance.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   */<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    // w/ a mocked up ServerManager.<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    setupClusterConnection();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    return new ServerManager(master);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
-<span class="sourceLineNo">881</span><a name="line.881"></a>
-<span class="sourceLineNo">882</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      throws IOException, InterruptedException {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    this.serverManager.waitForRegionServers(status);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Check zk for region servers that are up but didn't register<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServerName sn: this.regionServerTracker.getOnlineServers()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      // The isServerOnline check is opportunistic, correctness is handled inside<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      if (!this.serverManager.isServerOnline(sn)<a name="line.888"></a>
-<span class="sourceLineNo">889</span>          &amp;&amp; serverManager.checkAndRecordNewServer(sn, ServerLoad.EMPTY_SERVERLOAD)) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        LOG.info("Registered server found up in zk but who has not yet reported in: " + sn);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>  }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>  void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.clusterSchemaService.startAndWait();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (!this.clusterSchemaService.isRunning()) throw new HBaseIOException("Failed start");<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span 

<TRUNCATED>

[25/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
index 66dbcf3..7293a11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
@@ -130,7 +130,7 @@
 <span class="sourceLineNo">122</span><a name="line.122"></a>
 <span class="sourceLineNo">123</span>    /** We need to store a copy of the key. */<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    protected byte[] keyBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = null;<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    protected long memstoreTS;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    protected int nextKvOffset;<a name="line.128"></a>
@@ -140,1035 +140,1046 @@
 <span class="sourceLineNo">132</span>    private final ObjectIntPair&lt;ByteBuffer&gt; tmpPair;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    private final boolean includeTags;<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.tmpPair = tmpPair;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.includeTags = includeTags;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected boolean isValid() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return valueOffset != -1;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    protected void invalidate() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      valueOffset = -1;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      tagsCompressedLength = 0;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      uncompressTags = true;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      currentBuffer = null;<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>    protected void ensureSpaceForKey() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // rare case, but we need to handle arbitrary length of key<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          newKeyBufferLength *= 2;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        keyBuffer = newKeyBuffer;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    protected void ensureSpaceForTags() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          newTagsBufferLength *= 2;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        tagsBuffer = newTagsBuffer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      memstoreTS = memTS;<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>    /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     * Copy the state from the next one into this instance (the previous state<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     * seeker to the next key/value.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>     */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else if (!isValid()) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Note: we can only call isValid before we override our state, so this<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // comes before all the assignments at the end of this method.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>             nextState.keyLength);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // don't copy the common prefix between this key and the previous one<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                - nextState.lastCommonPrefix);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentKey = nextState.currentKey;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      valueOffset = nextState.valueOffset;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      keyLength = nextState.keyLength;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      valueLength = nextState.valueLength;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      memstoreTS = nextState.memstoreTS;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      currentBuffer = nextState.currentBuffer;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      tagsOffset = nextState.tagsOffset;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      tagsLength = nextState.tagsLength;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (nextState.tagCompressionContext != null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        tagCompressionContext = nextState.tagCompressionContext;<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>    public Cell toCell() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ByteBuffer valAndTagsBuffer;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      int vOffset;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int valAndTagsLength = this.valueLength;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int tagsLenSerializationSize = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // length<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        int tagsLenSerializationSize) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      int tOffset = 0;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (this.includeTags) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (this.tagCompressionContext == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          tagsArray = valAndTagsBuffer.array();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              + tagsLenSerializationSize;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        } else {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          tOffset = 0;<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>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          tOffset, this.tagsLength);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int tagsLenSerializationSize) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      int tOffset = 0;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.includeTags) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        if (this.tagCompressionContext == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          tagsBuf = valAndTagsBuffer;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        } else {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          tOffset = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * seeker state members for taking a clone.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * represented by the valueOffset and valueLength<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Streamable {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    private byte[] keyOnlyBuffer;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    private short rowLength;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    private int familyOffset;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    private byte familyLength;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    private int qualifierOffset;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    private int qualifierLength;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    private long timestamp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    private byte typeByte;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    private byte[] valueBuffer;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    private int valueOffset;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    private int valueLength;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    private byte[] tagsBuffer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    private int tagsOffset;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    private int tagsLength;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    private long seqId;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        int tagsOffset, int tagsLength) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      this.rowLength = rowLength;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      this.familyOffset = familyOffset;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.familyLength = familyLength;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      this.qualifierOffset = qualOffset;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.qualifierLength = qualLength;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      this.timestamp = timeStamp;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      this.typeByte = typeByte;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      this.valueBuffer = valueBuffer;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.valueOffset = valueOffset;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.valueLength = valueLen;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.tagsBuffer = tagsBuffer;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.tagsOffset = tagsOffset;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.tagsLength = tagsLength;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      setSequenceId(seqId);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public byte[] getRowArray() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return keyOnlyBuffer;<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>    @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public byte[] getFamilyArray() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return keyOnlyBuffer;<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>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public byte[] getQualifierArray() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return keyOnlyBuffer;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public int getRowOffset() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return Bytes.SIZEOF_SHORT;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public short getRowLength() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return rowLength;<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>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public int getFamilyOffset() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return familyOffset;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public byte getFamilyLength() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return familyLength;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public int getQualifierOffset() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return qualifierOffset;<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public int getQualifierLength() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return qualifierLength;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public long getTimestamp() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      return timestamp;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public byte getTypeByte() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return typeByte;<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>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public long getSequenceId() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return seqId;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public byte[] getValueArray() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return this.valueBuffer;<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>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public int getValueOffset() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return valueOffset;<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>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public int getValueLength() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return valueLength;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    public byte[] getTagsArray() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      return this.tagsBuffer;<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>    @Override<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    public int getTagsOffset() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return this.tagsOffset;<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>    @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    public int getTagsLength() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return tagsLength;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    @Override<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    public String toString() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.427"></a>
+<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        boolean tagsCompressed) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.tmpPair = tmpPair;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.includeTags = includeTags;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      if (tagsCompressed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        tagsBuffer = HConstants.EMPTY_BYTE_ARRAY;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    protected boolean isValid() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return valueOffset != -1;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    protected void invalidate() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      valueOffset = -1;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      tagsCompressedLength = 0;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      uncompressTags = true;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      currentBuffer = null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    protected void ensureSpaceForKey() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        // rare case, but we need to handle arbitrary length of key<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          newKeyBufferLength *= 2;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        keyBuffer = newKeyBuffer;<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><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    protected void ensureSpaceForTags() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          newTagsBufferLength *= 2;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        tagsBuffer = newTagsBuffer;<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><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      memstoreTS = memTS;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>     * Copy the state from the next one into this instance (the previous state<a name="line.190"></a>
+<span class="sourceLineNo">191</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.191"></a>
+<span class="sourceLineNo">192</span>     * seeker to the next key/value.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else if (!isValid()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        // Note: we can only call isValid before we override our state, so this<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // comes before all the assignments at the end of this method.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>             nextState.keyLength);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        // don't copy the common prefix between this key and the previous one<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                - nextState.lastCommonPrefix);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentKey = nextState.currentKey;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      valueOffset = nextState.valueOffset;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      keyLength = nextState.keyLength;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      valueLength = nextState.valueLength;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      memstoreTS = nextState.memstoreTS;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      currentBuffer = nextState.currentBuffer;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      tagsOffset = nextState.tagsOffset;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      tagsLength = nextState.tagsLength;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (nextState.tagCompressionContext != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tagCompressionContext = nextState.tagCompressionContext;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public Cell toCell() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      ByteBuffer valAndTagsBuffer;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      int vOffset;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      int valAndTagsLength = this.valueLength;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int tagsLenSerializationSize = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        // length<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<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><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        int tagsLenSerializationSize) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      int tOffset = 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (this.includeTags) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (this.tagCompressionContext == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          tagsArray = valAndTagsBuffer.array();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              + tagsLenSerializationSize;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          tOffset = 0;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          tOffset, this.tagsLength);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        int tagsLenSerializationSize) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      int tOffset = 0;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      if (this.includeTags) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        if (this.tagCompressionContext == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          tagsBuf = valAndTagsBuffer;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          tOffset = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * seeker state members for taking a clone.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * represented by the valueOffset and valueLength<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      Streamable {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    private byte[] keyOnlyBuffer;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    private short rowLength;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    private int familyOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    private byte familyLength;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private int qualifierOffset;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    private int qualifierLength;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private long timestamp;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private byte typeByte;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    private byte[] valueBuffer;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    private int valueOffset;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    private int valueLength;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    private byte[] tagsBuffer;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    private int tagsOffset;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    private int tagsLength;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    private long seqId;<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int tagsOffset, int tagsLength) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      this.rowLength = rowLength;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      this.familyOffset = familyOffset;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      this.familyLength = familyLength;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.qualifierOffset = qualOffset;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.qualifierLength = qualLength;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.timestamp = timeStamp;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.typeByte = typeByte;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.valueBuffer = valueBuffer;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.valueOffset = valueOffset;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.valueLength = valueLen;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.tagsBuffer = tagsBuffer;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.tagsOffset = tagsOffset;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.tagsLength = tagsLength;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setSequenceId(seqId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    public byte[] getRowArray() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return keyOnlyBuffer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public byte[] getFamilyArray() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return keyOnlyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    @Override<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public byte[] getQualifierArray() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return keyOnlyBuffer;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public int getRowOffset() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return Bytes.SIZEOF_SHORT;<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>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public short getRowLength() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return rowLength;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    public int getFamilyOffset() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return familyOffset;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public byte getFamilyLength() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return familyLength;<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public int getQualifierOffset() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return qualifierOffset;<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>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public int getQualifierLength() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return qualifierLength;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    public long getTimestamp() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return timestamp;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    public byte getTypeByte() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return typeByte;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public long getSequenceId() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return seqId;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public byte[] getValueArray() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return this.valueBuffer;<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>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public int getValueOffset() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      return valueOffset;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    public int getValueLength() {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return valueLength;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public byte[] getTagsArray() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return this.tagsBuffer;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public int getTagsOffset() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return this.tagsOffset;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public int getTagsLength() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return tagsLength;<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>    @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    public void setSequenceId(long seqId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.seqId = seqId;<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>    @Override<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public long heapSize() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    public int write(OutputStream out) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return write(out, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          tagsLength, withTags);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // Write key<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      out.write(keyOnlyBuffer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // Write value<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (withTags) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        // 2 bytes tags length followed by tags bytes<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      SettableSequenceId, Streamable {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.BYTE_BUFFER));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private ByteBuffer keyBuffer;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    private short rowLength;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    private int familyOffset;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private byte familyLength;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private int qualifierOffset;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    private int qualifierLength;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private long timestamp;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    private byte typeByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private ByteBuffer valueBuffer;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    private int valueOffset;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    private int valueLength;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    private ByteBuffer tagsBuffer;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    private int tagsOffset;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    private int tagsLength;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    private long seqId;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    protected OffheapDecodedCell(ByteBuffer keyBuffer, short rowLength, int familyOffset,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        ByteBuffer valueBuffer, int valueOffset, int valueLen, long seqId, ByteBuffer tagsBuffer,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        int tagsOffset, int tagsLength) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // The keyBuffer is always onheap<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      assert keyBuffer.hasArray();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      assert keyBuffer.arrayOffset() == 0;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this.keyBuffer = keyBuffer;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.rowLength = rowLength;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      this.familyOffset = familyOffset;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      this.familyLength = familyLength;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.qualifierOffset = qualOffset;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.qualifierLength = qualLength;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.timestamp = timeStamp;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.typeByte = typeByte;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.valueBuffer = valueBuffer;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.valueOffset = valueOffset;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      this.valueLength = valueLen;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      this.tagsBuffer = tagsBuffer;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.tagsOffset = tagsOffset;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.tagsLength = tagsLength;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      setSequenceId(seqId);<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>    @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public byte[] getRowArray() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      return this.keyBuffer.array();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public int getRowOffset() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return getRowPosition();<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>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public short getRowLength() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.rowLength;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public byte[] getFamilyArray() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.keyBuffer.array();<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>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public int getFamilyOffset() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      return getFamilyPosition();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public byte getFamilyLength() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.familyLength;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public byte[] getQualifierArray() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.keyBuffer.array();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @Override<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    public int getQualifierOffset() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return getQualifierPosition();<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>    @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    public int getQualifierLength() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.qualifierLength;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public long getTimestamp() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.timestamp;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public byte getTypeByte() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      return this.typeByte;<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>    @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    public long getSequenceId() {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      return this.seqId;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    public byte[] getValueArray() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      return CellUtil.cloneValue(this);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public int getValueOffset() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      return 0;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>    @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    public int getValueLength() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.valueLength;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    public byte[] getTagsArray() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return CellUtil.cloneTags(this);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    public int getTagsOffset() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return 0;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public int getTagsLength() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      return this.tagsLength;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    public ByteBuffer getRowByteBuffer() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.keyBuffer;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    public int getRowPosition() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      return Bytes.SIZEOF_SHORT;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    public ByteBuffer getFamilyByteBuffer() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return this.keyBuffer;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    @Override<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    public int getFamilyPosition() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.familyOffset;<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>    @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    public ByteBuffer getQualifierByteBuffer() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return this.keyBuffer;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>    @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    public int getQualifierPosition() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      return this.qualifierOffset;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    @Override<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    public ByteBuffer getValueByteBuffer() {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.valueBuffer;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    @Override<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public int getValuePosition() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return this.valueOffset;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    @Override<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    public ByteBuffer getTagsByteBuffer() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      return this.tagsBuffer;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    @Override<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    public int getTagsPosition() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.tagsOffset;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public long heapSize() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>    @Override<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    public void setSequenceId(long seqId) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      this.seqId = seqId;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    @Override<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    public int write(OutputStream out) throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return write(out, true);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          tagsLength, withTags);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      ByteBufferUtils.putInt(out, keyBuffer.capacity());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Write key<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      out.write(keyBuffer.array());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Write value<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      ByteBufferUtils.copyBufferToStream(out, this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (withTags) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // 2 bytes tags length followed by tags bytes<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        ByteBufferUtils.copyBufferToStream(out, this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      return lenToWrite + Bytes.SIZEOF_INT;<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>  protected abstract static class<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      BufferedEncodedSeeker&lt;STATE extends SeekerState&gt;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      implements EncodedSeeker {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    protected HFileBlockDecodingContext decodingCtx;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    protected final CellComparator comparator;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    protected ByteBuff currentBuffer;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    protected TagCompressionContext tagCompressionContext = null;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    protected  KeyValue.KeyOnlyKeyValue keyOnlyKV = new KeyValue.KeyOnlyKeyValue();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // many object creations.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    protected STATE current, previous;<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    public BufferedEncodedSeeker(CellComparator comparator,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        HFileBlockDecodingContext decodingCtx) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      this.comparator = comparator;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      this.decodingCtx = decodingCtx;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (decodingCtx.getHFileContext().isCompressTags()) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        try {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          tagCompressionContext = new TagCompressionContext(LRUDictionary.class, Byte.MAX_VALUE);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        } catch (Exception e) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          throw new RuntimeException("Failed to initialize TagCompressionContext", e);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      current = createSeekerState(); // always valid<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      previous = createSeekerState(); // may not be valid<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    protected boolean includesMvcc() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    protected boolean includesTags() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    @Override<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    public int compareKey(CellComparator comparator, Cell key) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      keyOnlyKV.setKey(current.keyBuffer, 0, current.keyLength);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      return comparator.compareKeyIgnoresMvcc(key, keyOnlyKV);<a name="line.730"></a>
+<span class="sourceLineNo">431</span>    public String toString() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    public void setSequenceId(long seqId) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      this.seqId = seqId;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public long heapSize() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<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>    @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    public int write(OutputStream out) throws IOException {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return write(out, true);<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>    @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          tagsLength, withTags);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      // Write key<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      out.write(keyOnlyBuffer);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      // Write value<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (withTags) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        // 2 bytes tags length followed by tags bytes<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      SettableSequenceId, Streamable {<a name="line.475"></a

<TRUNCATED>

[41/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.RowIndexEncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.RowIndexEncodingState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.RowIndexEncodingState.html
new file mode 100644
index 0000000..03ba991
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.RowIndexEncodingState.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.RowIndexEncodingState (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.RowIndexEncodingState (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.RowIndexEncodingState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.RowIndexEncodingState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.RowIndexEncodingState" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.RowIndexEncodingState</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1.RowIndexEncodingState</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.RowIndexEncodingState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.RowIndexEncodingState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.html
new file mode 100644
index 0000000..5ccc776
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1 (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1 (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexCodecV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexCodecV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html
new file mode 100644
index 0000000..045ebc9
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexEncoderV1 (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexEncoderV1 (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexEncoderV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexEncoderV1" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.encoding.RowIndexEncoderV1</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.io.encoding">org.apache.hadoop.hbase.io.encoding</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.io.encoding">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a> in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.RowIndexEncodingState.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html#encoder">encoder</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexEncoderV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html
new file mode 100644
index 0000000..0ed1c13
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html
@@ -0,0 +1,174 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.SeekerState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.io.encoding">org.apache.hadoop.hbase.io.encoding</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.io.encoding">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a> in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#current">current</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#previous">previous</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.SeekerState.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#copyFromNext(org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1.SeekerState)">copyFromNext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a>&nbsp;nextState)</code>
+<div class="block">Copy the state from the next one into this instance (the previous state placeholder).</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.SeekerState.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.html
new file mode 100644
index 0000000..3b1c0d5
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1 (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1 (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.io.encoding.RowIndexSeekerV1</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.html" target="_top">Frames</a></li>
+<li><a href="RowIndexSeekerV1.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-frame.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-frame.html
index 3825d33..3c74730 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-frame.html
@@ -38,6 +38,10 @@
 <li><a href="HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">HFileBlockDefaultDecodingContext</a></li>
 <li><a href="HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">HFileBlockDefaultEncodingContext</a></li>
 <li><a href="PrefixKeyDeltaEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">PrefixKeyDeltaEncoder</a></li>
+<li><a href="RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexCodecV1</a></li>
+<li><a href="RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexCodecV1.RowIndexEncodingState</a></li>
+<li><a href="RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexEncoderV1</a></li>
+<li><a href="RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">RowIndexSeekerV1</a></li>
 </ul>
 <h2 title="Enums">Enums</h2>
 <ul title="Enums">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-summary.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-summary.html
index 0614584..76e731b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-summary.html
@@ -229,6 +229,24 @@
  and storing raw size of rest.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></td>
+<td class="colLast">
+<div class="block">Store cells following every row's start offset, so we can binary search to a row's cells.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1.RowIndexEncodingState</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-tree.html
index 639e869..cbc85f6 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-tree.html
@@ -104,6 +104,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">EncodingState</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexCodecV1.RowIndexEncodingState</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">HFileBlockDefaultDecodingContext</span></a> (implements org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>)</li>
@@ -117,6 +118,10 @@
 </li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexCodecV1</span></a> (implements org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexEncoderV1</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexSeekerV1</span></a> (implements org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.io.encoding.<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="strong">RowIndexSeekerV1.SeekerState</span></a></li>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><span class="strong">Throwable</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><span class="strong">Exception</span></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-use.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-use.html
index 287a06b..753d0eb 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/package-use.html
@@ -239,6 +239,12 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  across the writer's whole lifetime.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/class-use/RowIndexEncoderV1.html#org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/class-use/RowIndexSeekerV1.SeekerState.html#org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1.SeekerState</a>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/HFileContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/HFileContext.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/HFileContext.html
index 7c8d02b..8b687a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/HFileContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/HFileContext.html
@@ -181,15 +181,25 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#newDataBlockDecodingContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockDecodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>
 <div class="block">Creates an encoder specific decoding context, which will prepare the data
  before actual decoding</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,
+                                                      byte[]&nbsp;header,
+                                                      <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;meta)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#newDataBlockEncodingContext(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20byte[],%20org.apache.hadoop.hbase.io.hfile.HFileContext)">newDataBlockEncodingContext</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;encoding,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 57ef97f..e9c5232 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -249,12 +249,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType</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="strong">BlockPriority</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="strong">Cacheable.MemoryType</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="strong">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="strong">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">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="strong">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="strong">BlockType</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="strong">HFileBlock.Writer.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/package-use.html b/devapidocs/org/apache/hadoop/hbase/io/package-use.html
index cf49a18..f8e6745 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/package-use.html
@@ -393,11 +393,17 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/io/class-use/ByteArrayOutputStream.html#org.apache.hadoop.hbase.io.encoding">ByteArrayOutputStream</a>
+<div class="block">Our own implementation of ByteArrayOutputStream where all methods are NOT synchronized and
+ supports writing ByteBuffer directly to it.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/io/class-use/HeapSize.html#org.apache.hadoop.hbase.io.encoding">HeapSize</a>
 <div class="block">Implementations can be asked for an estimate of their size in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/io/class-use/TagCompressionContext.html#org.apache.hadoop.hbase.io.encoding">TagCompressionContext</a>
 <div class="block">Context that holds the dictionary for Tag compression and doing the compress/uncompress.</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index 97044b5..df0d190 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.202">HMaster.InitializationMonitor</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.203">HMaster.InitializationMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></pre>
 <div class="block">Protection against zombie master. Started once Master accepts active responsibility and
  starts taking over responsibilities. Allows a finite time window before giving up ownership.</div>
@@ -236,7 +236,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>TIMEOUT_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.204">TIMEOUT_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.205">TIMEOUT_KEY</a></pre>
 <div class="block">The amount of time in milliseconds to sleep before checking initialization status.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.InitializationMonitor.TIMEOUT_KEY">Constant Field Values</a></dd></dl>
 </li>
@@ -247,7 +247,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>TIMEOUT_DEFAULT</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.205">TIMEOUT_DEFAULT</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.206">TIMEOUT_DEFAULT</a></pre>
 </li>
 </ul>
 <a name="HALT_KEY">
@@ -256,7 +256,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>HALT_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.211">HALT_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.212">HALT_KEY</a></pre>
 <div class="block">When timeout expired and initialization has not complete, call <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/System.html?is-external=true#exit(int)" title="class or interface in java.lang"><code>System.exit(int)</code></a> when
  true, do nothing otherwise.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.InitializationMonitor.HALT_KEY">Constant Field Values</a></dd></dl>
@@ -268,7 +268,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>HALT_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.212">HALT_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.213">HALT_DEFAULT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.InitializationMonitor.HALT_DEFAULT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -278,7 +278,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.214">master</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.215">master</a></pre>
 </li>
 </ul>
 <a name="timeout">
@@ -287,7 +287,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>timeout</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.215">timeout</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.216">timeout</a></pre>
 </li>
 </ul>
 <a name="haltOnTimeout">
@@ -296,7 +296,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>haltOnTimeout</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.216">haltOnTimeout</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.217">haltOnTimeout</a></pre>
 </li>
 </ul>
 </li>
@@ -313,7 +313,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HMaster.InitializationMonitor</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.219">HMaster.InitializationMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.220">HMaster.InitializationMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master)</pre>
 <div class="block">Creates a Thread that monitors the <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized()"><code>HMaster.isInitialized()</code></a> state.</div>
 </li>
 </ul>
@@ -331,7 +331,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.228">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.229">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
index a0affd4..ec3cb28 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.380">HMaster.PeriodicDoMetrics</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.381">HMaster.PeriodicDoMetrics</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -206,7 +206,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>server</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html#line.381">server</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html#line.382">server</a></pre>
 </li>
 </ul>
 </li>
@@ -223,7 +223,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HMaster.PeriodicDoMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html#line.382">HMaster.PeriodicDoMetrics</a>(int&nbsp;doMetricsInterval,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html#line.383">HMaster.PeriodicDoMetrics</a>(int&nbsp;doMetricsInterval,
                          <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;server)</pre>
 </li>
 </ul>
@@ -241,7 +241,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html#line.388">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.PeriodicDoMetrics.html#line.389">chore</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore()">ScheduledChore</a></code></strong></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index 3240526..0ca1223 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.366">HMaster.RedirectServlet</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.367">HMaster.RedirectServlet</a>
 extends javax.servlet.http.HttpServlet</pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.master.HMaster.RedirectServlet">Serialized Form</a></dd></dl>
 </li>
@@ -221,7 +221,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.367">serialVersionUID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.368">serialVersionUID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.RedirectServlet.serialVersionUID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -231,7 +231,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServerInfoPort</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.368">regionServerInfoPort</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.369">regionServerInfoPort</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HMaster.RedirectServlet</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.366">HMaster.RedirectServlet</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.367">HMaster.RedirectServlet</a>()</pre>
 </li>
 </ul>
 </li>
@@ -265,7 +265,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doGet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.371">doGet</a>(javax.servlet.http.HttpServletRequest&nbsp;request,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.372">doGet</a>(javax.servlet.http.HttpServletRequest&nbsp;request,
          javax.servlet.http.HttpServletResponse&nbsp;response)
            throws javax.servlet.ServletException,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>


[51/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
Published site at 950d547dae684155020edb879a343bee1bf18e97.


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

Branch: refs/heads/asf-site
Commit: 45a663ddf60dc746b8d49b81ac31e837df318ef8
Parents: 3ddf007
Author: jenkins <bu...@apache.org>
Authored: Mon Aug 29 14:53:23 2016 +0000
Committer: Misty Stanley-Jones <mi...@apache.org>
Committed: Mon Aug 29 08:31:40 2016 -0700

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 .../hbase/io/encoding/DataBlockEncoding.html    |    40 +-
 .../hbase/io/encoding/DataBlockEncoding.html    |   317 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 16012 +++++++++--------
 coc.html                                        |     4 +-
 cygwin.html                                     |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/allclasses-frame.html                |     7 +-
 devapidocs/allclasses-noframe.html              |     7 +-
 devapidocs/constant-values.html                 |    57 +-
 devapidocs/index-all.html                       |   236 +-
 .../apache/hadoop/hbase/HBaseIOException.html   |     2 +-
 .../example/LongTermArchivingHFileCleaner.html  |     2 +-
 .../class-use/ByteBufferedKeyOnlyKeyValue.html  |    22 +
 .../org/apache/hadoop/hbase/class-use/Cell.html |    99 +-
 .../hadoop/hbase/class-use/CellComparator.html  |    18 +
 .../hbase/class-use/HBaseIOException.html       |     8 +-
 .../hadoop/hbase/class-use/Stoppable.html       |    18 +
 .../class-use/InterfaceAudience.Private.html    |    24 +-
 .../hbase/classification/package-tree.html      |     8 +-
 .../hadoop/hbase/client/package-tree.html       |     8 +-
 .../hbase/exceptions/TimeoutIOException.html    |     4 +-
 .../exceptions/UnexpectedStateException.html    |   336 +
 .../exceptions/UnknownProtocolException.html    |     4 +-
 .../class-use/UnexpectedStateException.html     |   163 +
 .../hadoop/hbase/exceptions/package-frame.html  |     1 +
 .../hbase/exceptions/package-summary.html       |     4 +
 .../hadoop/hbase/exceptions/package-tree.html   |     1 +
 .../hadoop/hbase/exceptions/package-use.html    |     3 +
 .../hadoop/hbase/filter/package-tree.html       |    10 +-
 .../io/class-use/ByteArrayOutputStream.html     |    24 +-
 ...kEncoder.BufferedDataBlockEncodingState.html |     6 +-
 ...dDataBlockEncoder.BufferedEncodedSeeker.html |    71 +-
 ...eredDataBlockEncoder.OffheapDecodedCell.html |   100 +-
 ...feredDataBlockEncoder.OnheapDecodedCell.html |    82 +-
 .../BufferedDataBlockEncoder.SeekerState.html   |    28 +-
 .../io/encoding/BufferedDataBlockEncoder.html   |    22 +-
 .../DataBlockEncoder.EncodedSeeker.html         |     2 +-
 .../hbase/io/encoding/DataBlockEncoder.html     |     2 +-
 .../hbase/io/encoding/DataBlockEncoding.html    |    46 +-
 .../DiffKeyDeltaEncoder.DiffSeekerState.html    |    12 +-
 .../hbase/io/encoding/DiffKeyDeltaEncoder.html  |     4 +-
 .../hadoop/hbase/io/encoding/EncodingState.html |     2 +-
 ...astDiffDeltaEncoder.FastDiffSeekerState.html |    12 +-
 .../hbase/io/encoding/FastDiffDeltaEncoder.html |     2 +-
 .../io/encoding/PrefixKeyDeltaEncoder.html      |     4 +-
 .../RowIndexCodecV1.RowIndexEncodingState.html  |   282 +
 .../hbase/io/encoding/RowIndexCodecV1.html      |   509 +
 .../hbase/io/encoding/RowIndexEncoderV1.html    |   398 +
 .../encoding/RowIndexSeekerV1.SeekerState.html  |   520 +
 .../hbase/io/encoding/RowIndexSeekerV1.html     |   718 +
 .../DataBlockEncoder.EncodedSeeker.html         |    15 +-
 .../io/encoding/class-use/DataBlockEncoder.html |     6 +
 .../encoding/class-use/DataBlockEncoding.html   |     8 +-
 .../io/encoding/class-use/EncodingState.html    |     4 +
 .../class-use/HFileBlockDecodingContext.html    |    30 +-
 .../HFileBlockDefaultEncodingContext.html       |    25 +
 .../class-use/HFileBlockEncodingContext.html    |    29 +-
 .../RowIndexCodecV1.RowIndexEncodingState.html  |   115 +
 .../io/encoding/class-use/RowIndexCodecV1.html  |   115 +
 .../encoding/class-use/RowIndexEncoderV1.html   |   155 +
 .../class-use/RowIndexSeekerV1.SeekerState.html |   174 +
 .../io/encoding/class-use/RowIndexSeekerV1.html |   115 +
 .../hadoop/hbase/io/encoding/package-frame.html |     4 +
 .../hbase/io/encoding/package-summary.html      |    18 +
 .../hadoop/hbase/io/encoding/package-tree.html  |     5 +
 .../hadoop/hbase/io/encoding/package-use.html   |     6 +
 .../hbase/io/hfile/class-use/HFileContext.html  |    12 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     8 +-
 .../org/apache/hadoop/hbase/io/package-use.html |     8 +-
 .../master/HMaster.InitializationMonitor.html   |    20 +-
 .../hbase/master/HMaster.PeriodicDoMetrics.html |     8 +-
 .../hbase/master/HMaster.RedirectServlet.html   |    10 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |   378 +-
 .../hbase/master/class-use/MasterServices.html  |    14 +-
 .../master/cleaner/BaseFileCleanerDelegate.html |    29 +-
 .../cleaner/BaseHFileCleanerDelegate.html       |     2 +-
 .../master/cleaner/BaseLogCleanerDelegate.html  |     2 +-
 .../hbase/master/cleaner/CleanerChore.html      |    63 +-
 .../master/cleaner/FileCleanerDelegate.html     |    22 +-
 .../hbase/master/cleaner/HFileCleaner.html      |    38 +-
 .../hbase/master/cleaner/HFileLinkCleaner.html  |     2 +-
 .../hadoop/hbase/master/cleaner/LogCleaner.html |     2 +-
 .../master/cleaner/TimeToLiveHFileCleaner.html  |     2 +-
 .../master/cleaner/TimeToLiveLogCleaner.html    |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../snapshot/DisabledTableSnapshotHandler.html  |    12 +-
 .../snapshot/EnabledTableSnapshotHandler.html   |     2 +-
 .../SnapshotFileCache.RefreshCacheTask.html     |     6 +-
 ...SnapshotFileCache.SnapshotDirectoryInfo.html |    12 +-
 ...SnapshotFileCache.SnapshotFileInspector.html |     4 +-
 .../master/snapshot/SnapshotFileCache.html      |    46 +-
 .../master/snapshot/SnapshotHFileCleaner.html   |    68 +-
 .../hbase/master/snapshot/SnapshotManager.html  |   209 +-
 .../master/snapshot/TakeSnapshotHandler.html    |   107 +-
 .../snapshot/class-use/SnapshotManager.html     |    43 +
 .../hadoop/hbase/nio/class-use/ByteBuff.html    |    34 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    12 +-
 .../org/apache/hadoop/hbase/package-use.html    |    15 +-
 .../hadoop/hbase/quotas/package-tree.html       |     4 +-
 .../hbase/regionserver/AbstractMemStore.html    |    84 +-
 .../HRegionServer.CompactionChecker.html        |    14 +-
 .../HRegionServer.MovedRegionInfo.html          |    16 +-
 .../HRegionServer.MovedRegionsCleaner.html      |    16 +-
 .../HRegionServer.PeriodicMemstoreFlusher.html  |    12 +-
 .../hbase/regionserver/HRegionServer.html       |   242 +-
 ...eapMemoryManager.HeapMemoryTuneObserver.html |   221 +
 .../HeapMemoryManager.HeapMemoryTunerChore.html |    28 +-
 .../HeapMemoryManager.TunerContext.html         |    52 +-
 .../HeapMemoryManager.TunerResult.html          |    20 +-
 .../hbase/regionserver/HeapMemoryManager.html   |   116 +-
 .../hadoop/hbase/regionserver/MemStore.html     |    32 +-
 .../MemStoreChunkPool.PooledChunk.html          |     4 +-
 .../MemStoreChunkPool.StatisticsThread.html     |     8 +-
 .../hbase/regionserver/MemStoreChunkPool.html   |   127 +-
 .../hbase/regionserver/TimeRangeTracker.html    |     4 +-
 .../regionserver/UnexpectedStateException.html  |   336 -
 .../regionserver/VersionedSegmentsList.html     |     4 +-
 ...eapMemoryManager.HeapMemoryTuneObserver.html |   183 +
 .../class-use/UnexpectedStateException.html     |   163 -
 .../hbase/regionserver/package-frame.html       |     2 +-
 .../hbase/regionserver/package-summary.html     |    96 +-
 .../hadoop/hbase/regionserver/package-tree.html |    24 +-
 .../hadoop/hbase/regionserver/package-use.html  |   324 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 .../master/ReplicationHFileCleaner.html         |     7 +
 .../master/ReplicationLogCleaner.html           |     7 +
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     4 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    96 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    36 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    18 +-
 .../hadoop/hbase/util/class-use/KeyLocker.html  |    40 +
 .../hbase/util/class-use/ObjectIntPair.html     |    19 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     8 +-
 .../apache/hadoop/hbase/util/package-use.html   |     5 +
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 devapidocs/overview-tree.html                   |    10 +-
 devapidocs/serialized-form.html                 |    18 +-
 .../exceptions/UnexpectedStateException.html    |   115 +
 ...kEncoder.BufferedDataBlockEncodingState.html |  2047 +--
 ...dDataBlockEncoder.BufferedEncodedSeeker.html |  2047 +--
 ...eredDataBlockEncoder.OffheapDecodedCell.html |  2047 +--
 ...feredDataBlockEncoder.OnheapDecodedCell.html |  2047 +--
 .../BufferedDataBlockEncoder.SeekerState.html   |  2047 +--
 .../io/encoding/BufferedDataBlockEncoder.html   |  2047 +--
 .../hbase/io/encoding/DataBlockEncoding.html    |   317 +-
 ...iffKeyDeltaEncoder.DiffCompressionState.html |   324 +-
 .../DiffKeyDeltaEncoder.DiffSeekerState.html    |   324 +-
 .../hbase/io/encoding/DiffKeyDeltaEncoder.html  |   324 +-
 ...ffDeltaEncoder.FastDiffCompressionState.html |   294 +-
 ...astDiffDeltaEncoder.FastDiffSeekerState.html |   294 +-
 .../hbase/io/encoding/FastDiffDeltaEncoder.html |   294 +-
 .../RowIndexCodecV1.RowIndexEncodingState.html  |   249 +
 .../hbase/io/encoding/RowIndexCodecV1.html      |   249 +
 .../hbase/io/encoding/RowIndexEncoderV1.html    |   185 +
 .../encoding/RowIndexSeekerV1.SeekerState.html  |   485 +
 .../hbase/io/encoding/RowIndexSeekerV1.html     |   485 +
 .../VerifyReplication.Verifier.Counters.html    |     2 +-
 .../replication/VerifyReplication.Verifier.html |     2 +-
 .../replication/VerifyReplication.html          |     2 +-
 .../master/HMaster.InitializationMonitor.html   |  5605 +++---
 .../hbase/master/HMaster.PeriodicDoMetrics.html |  5605 +++---
 .../hbase/master/HMaster.RedirectServlet.html   |  5605 +++---
 .../org/apache/hadoop/hbase/master/HMaster.html |  5605 +++---
 .../master/cleaner/BaseFileCleanerDelegate.html |    53 +-
 .../hbase/master/cleaner/CleanerChore.html      |   487 +-
 .../master/cleaner/FileCleanerDelegate.html     |    38 +-
 .../hbase/master/cleaner/HFileCleaner.html      |    92 +-
 .../snapshot/DisabledTableSnapshotHandler.html  |     4 +-
 .../snapshot/EnabledTableSnapshotHandler.html   |     2 +-
 .../SnapshotFileCache.RefreshCacheTask.html     |   710 +-
 ...SnapshotFileCache.SnapshotDirectoryInfo.html |   710 +-
 ...SnapshotFileCache.SnapshotFileInspector.html |   710 +-
 .../master/snapshot/SnapshotFileCache.html      |   710 +-
 .../master/snapshot/SnapshotHFileCleaner.html   |   185 +-
 .../hbase/master/snapshot/SnapshotManager.html  |  2268 +--
 .../master/snapshot/TakeSnapshotHandler.html    |   612 +-
 .../hbase/regionserver/AbstractMemStore.html    |   863 +-
 .../HRegionServer.CompactionChecker.html        |  3811 ++--
 .../HRegionServer.MovedRegionInfo.html          |  3811 ++--
 .../HRegionServer.MovedRegionsCleaner.html      |  3811 ++--
 .../HRegionServer.PeriodicMemstoreFlusher.html  |  3811 ++--
 .../hbase/regionserver/HRegionServer.html       |  3811 ++--
 ...eapMemoryManager.HeapMemoryTuneObserver.html |   588 +
 .../HeapMemoryManager.HeapMemoryTunerChore.html |   948 +-
 .../HeapMemoryManager.TunerContext.html         |   948 +-
 .../HeapMemoryManager.TunerResult.html          |   948 +-
 .../hbase/regionserver/HeapMemoryManager.html   |   948 +-
 .../hadoop/hbase/regionserver/MemStore.html     |   235 +-
 .../MemStoreChunkPool.PooledChunk.html          |   448 +-
 .../MemStoreChunkPool.StatisticsThread.html     |   448 +-
 .../hbase/regionserver/MemStoreChunkPool.html   |   448 +-
 .../regionserver/UnexpectedStateException.html  |   115 -
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    64 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    90 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |    90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    24 +-
 distribution-management.html                    |     4 +-
 export_control.html                             |     4 +-
 hbase-annotations/checkstyle.html               |     6 +-
 hbase-annotations/dependencies.html             |     6 +-
 hbase-annotations/dependency-convergence.html   |     6 +-
 hbase-annotations/dependency-info.html          |     6 +-
 hbase-annotations/dependency-management.html    |     6 +-
 hbase-annotations/distribution-management.html  |     6 +-
 hbase-annotations/index.html                    |     6 +-
 hbase-annotations/integration.html              |     6 +-
 hbase-annotations/issue-tracking.html           |     6 +-
 hbase-annotations/license.html                  |     6 +-
 hbase-annotations/mail-lists.html               |     6 +-
 hbase-annotations/plugin-management.html        |     6 +-
 hbase-annotations/plugins.html                  |     6 +-
 hbase-annotations/project-info.html             |     6 +-
 hbase-annotations/project-reports.html          |     6 +-
 hbase-annotations/project-summary.html          |     6 +-
 hbase-annotations/source-repository.html        |     6 +-
 hbase-annotations/team-list.html                |     6 +-
 hbase-archetypes/dependencies.html              |     6 +-
 hbase-archetypes/dependency-convergence.html    |     6 +-
 hbase-archetypes/dependency-info.html           |     6 +-
 hbase-archetypes/dependency-management.html     |     6 +-
 hbase-archetypes/distribution-management.html   |     6 +-
 .../hbase-archetype-builder/dependencies.html   |     6 +-
 .../dependency-convergence.html                 |     6 +-
 .../dependency-info.html                        |     6 +-
 .../dependency-management.html                  |     6 +-
 .../distribution-management.html                |     6 +-
 .../hbase-archetype-builder/index.html          |     6 +-
 .../hbase-archetype-builder/integration.html    |     6 +-
 .../hbase-archetype-builder/issue-tracking.html |     6 +-
 .../hbase-archetype-builder/license.html        |     6 +-
 .../hbase-archetype-builder/mail-lists.html     |     6 +-
 .../plugin-management.html                      |     6 +-
 .../hbase-archetype-builder/plugins.html        |     6 +-
 .../hbase-archetype-builder/project-info.html   |     6 +-
 .../project-summary.html                        |     6 +-
 .../source-repository.html                      |     6 +-
 .../hbase-archetype-builder/team-list.html      |     6 +-
 .../hbase-client-project/checkstyle.html        |     6 +-
 .../hbase-client-project/dependencies.html      |     6 +-
 .../dependency-convergence.html                 |     6 +-
 .../hbase-client-project/dependency-info.html   |     6 +-
 .../dependency-management.html                  |     6 +-
 .../distribution-management.html                |     6 +-
 .../hbase-client-project/index.html             |     6 +-
 .../hbase-client-project/integration.html       |     6 +-
 .../hbase-client-project/issue-tracking.html    |     6 +-
 .../hbase-client-project/license.html           |     6 +-
 .../hbase-client-project/mail-lists.html        |     6 +-
 .../hbase-client-project/plugin-management.html |     6 +-
 .../hbase-client-project/plugins.html           |     6 +-
 .../hbase-client-project/project-info.html      |     6 +-
 .../hbase-client-project/project-reports.html   |     6 +-
 .../hbase-client-project/project-summary.html   |     6 +-
 .../hbase-client-project/source-repository.html |     6 +-
 .../hbase-client-project/team-list.html         |     6 +-
 .../hbase-shaded-client-project/checkstyle.html |     6 +-
 .../dependencies.html                           |     6 +-
 .../dependency-convergence.html                 |     6 +-
 .../dependency-info.html                        |     6 +-
 .../dependency-management.html                  |     6 +-
 .../distribution-management.html                |     6 +-
 .../hbase-shaded-client-project/index.html      |     6 +-
 .../integration.html                            |     6 +-
 .../issue-tracking.html                         |     6 +-
 .../hbase-shaded-client-project/license.html    |     6 +-
 .../hbase-shaded-client-project/mail-lists.html |     6 +-
 .../plugin-management.html                      |     6 +-
 .../hbase-shaded-client-project/plugins.html    |     6 +-
 .../project-info.html                           |     6 +-
 .../project-reports.html                        |     6 +-
 .../project-summary.html                        |     6 +-
 .../source-repository.html                      |     6 +-
 .../hbase-shaded-client-project/team-list.html  |     6 +-
 hbase-archetypes/index.html                     |     6 +-
 hbase-archetypes/integration.html               |     6 +-
 hbase-archetypes/issue-tracking.html            |     6 +-
 hbase-archetypes/license.html                   |     6 +-
 hbase-archetypes/mail-lists.html                |     6 +-
 hbase-archetypes/modules.html                   |     6 +-
 hbase-archetypes/plugin-management.html         |     6 +-
 hbase-archetypes/plugins.html                   |     6 +-
 hbase-archetypes/project-info.html              |     6 +-
 hbase-archetypes/project-summary.html           |     6 +-
 hbase-archetypes/source-repository.html         |     6 +-
 hbase-archetypes/team-list.html                 |     6 +-
 hbase-spark/checkstyle.html                     |     6 +-
 hbase-spark/dependencies.html                   |     6 +-
 hbase-spark/dependency-convergence.html         |     6 +-
 hbase-spark/dependency-info.html                |     6 +-
 hbase-spark/dependency-management.html          |     6 +-
 hbase-spark/distribution-management.html        |     6 +-
 hbase-spark/index.html                          |     6 +-
 hbase-spark/integration.html                    |     6 +-
 hbase-spark/issue-tracking.html                 |     6 +-
 hbase-spark/license.html                        |     6 +-
 hbase-spark/mail-lists.html                     |     6 +-
 hbase-spark/plugin-management.html              |     6 +-
 hbase-spark/plugins.html                        |     6 +-
 hbase-spark/project-info.html                   |     6 +-
 hbase-spark/project-reports.html                |     6 +-
 hbase-spark/project-summary.html                |     6 +-
 hbase-spark/source-repository.html              |     6 +-
 hbase-spark/team-list.html                      |     6 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 modules.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 +-
 .../encoding/TestBufferedDataBlockEncoder.html  |    26 +-
 .../cleaner/TestCleanerChore.AllValidPaths.html |     2 +-
 .../cleaner/TestCleanerChore.AlwaysDelete.html  |     2 +-
 .../cleaner/TestCleanerChore.NeverDelete.html   |     2 +-
 .../TestSnapshotFileCache.SnapshotFiles.html    |     6 +-
 .../master/snapshot/TestSnapshotFileCache.html  |    12 +-
 .../snapshot/TestSnapshotHFileCleaner.html      |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    12 +-
 ...MemStore.EnvironmentEdgeForMemstoreTest.html |    10 +-
 ...TestDefaultMemStore.ReadOwnWritesTester.html |    24 +-
 .../hbase/regionserver/TestDefaultMemStore.html |   102 +-
 .../regionserver/TestMemStoreChunkPool.html     |    28 +-
 .../hadoop/hbase/regionserver/package-tree.html |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 testdevapidocs/serialized-form.html             |    18 +-
 .../encoding/TestBufferedDataBlockEncoder.html  |   111 +-
 .../encoding/TestSeekToBlockWithEncoders.html   |     4 +-
 .../TestSnapshotFileCache.SnapshotFiles.html    |   283 +-
 .../master/snapshot/TestSnapshotFileCache.html  |   283 +-
 .../TestSnapshotHFileCleaner.SnapshotFiles.html |    43 +-
 .../snapshot/TestSnapshotHFileCleaner.html      |    43 +-
 ...MemStore.EnvironmentEdgeForMemstoreTest.html |  2153 +--
 ...TestDefaultMemStore.ReadOwnWritesTester.html |  2153 +--
 .../hbase/regionserver/TestDefaultMemStore.html |  2153 +--
 .../regionserver/TestMemStoreChunkPool.html     |   433 +-
 .../encoding/TestBufferedDataBlockEncoder.html  |   111 +-
 .../encoding/TestSeekToBlockWithEncoders.html   |     4 +-
 .../master/snapshot/TestSnapshotFileCache.html  |   283 +-
 .../snapshot/TestSnapshotHFileCleaner.html      |    43 +-
 .../hbase/regionserver/TestDefaultMemStore.html |  2153 +--
 .../regionserver/TestMemStoreChunkPool.html     |   433 +-
 xref/allclasses-frame.html                      |    19 +-
 .../exceptions/UnexpectedStateException.html    |    56 +
 .../hadoop/hbase/exceptions/package-frame.html  |     3 +
 .../hbase/exceptions/package-summary.html       |     5 +
 .../io/encoding/BufferedDataBlockEncoder.html   |  2049 +--
 .../hbase/io/encoding/DataBlockEncoding.html    |   317 +-
 .../hbase/io/encoding/DiffKeyDeltaEncoder.html  |   326 +-
 .../hbase/io/encoding/FastDiffDeltaEncoder.html |   296 +-
 .../hbase/io/encoding/RowIndexCodecV1.html      |   190 +
 .../hbase/io/encoding/RowIndexEncoderV1.html    |   126 +
 .../hbase/io/encoding/RowIndexSeekerV1.html     |   426 +
 .../hadoop/hbase/io/encoding/package-frame.html |    14 +-
 .../hbase/io/encoding/package-summary.html      |    22 +-
 .../replication/VerifyReplication.html          |     2 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |  5605 +++---
 .../master/cleaner/BaseFileCleanerDelegate.html |    53 +-
 .../hbase/master/cleaner/CleanerChore.html      |   487 +-
 .../master/cleaner/FileCleanerDelegate.html     |    38 +-
 .../hbase/master/cleaner/HFileCleaner.html      |    92 +-
 .../snapshot/DisabledTableSnapshotHandler.html  |     4 +-
 .../snapshot/EnabledTableSnapshotHandler.html   |     2 +-
 .../master/snapshot/SnapshotFileCache.html      |   710 +-
 .../master/snapshot/SnapshotHFileCleaner.html   |   185 +-
 .../hbase/master/snapshot/SnapshotManager.html  |  2268 +--
 .../master/snapshot/TakeSnapshotHandler.html    |   612 +-
 .../hbase/regionserver/AbstractMemStore.html    |   863 +-
 .../hbase/regionserver/HRegionServer.html       |  3811 ++--
 .../hbase/regionserver/HeapMemoryManager.html   |   948 +-
 .../hadoop/hbase/regionserver/MemStore.html     |   235 +-
 .../hbase/regionserver/MemStoreChunkPool.html   |   448 +-
 .../regionserver/UnexpectedStateException.html  |    57 -
 .../hbase/regionserver/package-frame.html       |     8 +-
 .../hbase/regionserver/package-summary.html     |    24 +-
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |    90 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |    24 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    64 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    24 +-
 412 files changed, 69048 insertions(+), 60850 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index b9253bc..3ebdb8c 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -600,7 +600,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 0507ee9..4236d13 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.6, based on Prawn 1.2.1)
 /Producer (Apache HBase Team)
-/CreationDate (D:20160825144131+00'00')
-/ModDate (D:20160825144131+00'00')
+/CreationDate (D:20160829144207+00'00')
+/ModDate (D:20160829144207+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index e87a321..a633d9b 100644
--- a/apache_hbase_reference_guide.pdfmarks
+++ b/apache_hbase_reference_guide.pdfmarks
@@ -2,8 +2,8 @@
   /Author (Apache HBase Team)
   /Subject ()
   /Keywords ()
-  /ModDate (D:20160825144309)
-  /CreationDate (D:20160825144309)
+  /ModDate (D:20160829144344)
+  /CreationDate (D:20160829144344)
   /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
   /Producer ()
   /DOCINFO pdfmark

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/apidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html b/apidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
index 8b295d7..47b80af 100644
--- a/apidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
+++ b/apidocs/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
@@ -146,6 +146,9 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is
 <tr class="altColor">
 <td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#PREFIX_TREE">PREFIX_TREE</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#ROW_INDEX_V1">ROW_INDEX_V1</a></strong></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -316,12 +319,21 @@ the order they are declared.</div>
 <a name="PREFIX_TREE">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>PREFIX_TREE</h4>
 <pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.46">PREFIX_TREE</a></pre>
 </li>
 </ul>
+<a name="ROW_INDEX_V1">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ROW_INDEX_V1</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.47">ROW_INDEX_V1</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ FIELD DETAIL =========== -->
@@ -336,7 +348,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ID_SIZE</h4>
-<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.53">ID_SIZE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.54">ID_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.encoding.DataBlockEncoding.ID_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -354,7 +366,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/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.196">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.197">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:
@@ -371,7 +383,7 @@ for (DataBlockEncoding c : DataBlockEncoding.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.196">valueOf</a>(<a href="http://docs.oracle.com/javase/7/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/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.197">valueOf</a>(<a href="http://docs.oracle.com/javase/7/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 
@@ -389,7 +401,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getNameInBytes</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.91">getNameInBytes</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.92">getNameInBytes</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>name converted to bytes.</dd></dl>
 </li>
 </ul>
@@ -399,7 +411,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getId</h4>
-<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.98">getId</a>()</pre>
+<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.99">getId</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The id of a data block encoder.</dd></dl>
 </li>
 </ul>
@@ -409,7 +421,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>writeIdInBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.106">writeIdInBytes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.107">writeIdInBytes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Writes id in bytes.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>stream</code> - where the id should be written.</dd>
@@ -423,7 +435,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>writeIdInBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.118">writeIdInBytes</a>(byte[]&nbsp;dest,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.119">writeIdInBytes</a>(byte[]&nbsp;dest,
                   int&nbsp;offset)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Writes id bytes to the given array starting from offset.</div>
@@ -438,7 +450,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncoder</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.127">getEncoder</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.128">getEncoder</a>()</pre>
 <div class="block">Return new data block encoder for given algorithm type.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>data block encoder if algorithm is specified, null if none is
          selected.</dd></dl>
@@ -450,7 +462,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataBlockEncoderById</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.140">getDataBlockEncoderById</a>(short&nbsp;encoderId)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.141">getDataBlockEncoderById</a>(short&nbsp;encoderId)</pre>
 <div class="block">Find and create data block encoder for given id;</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encoderId</code> - id of data block encoder.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>Newly created data block encoder.</dd></dl>
@@ -462,7 +474,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getNameFromId</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.155">getNameFromId</a>(short&nbsp;encoderId)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.156">getNameFromId</a>(short&nbsp;encoderId)</pre>
 <div class="block">Find and return the name of data block encoder for the given id.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encoderId</code> - id of data block encoder</dd>
 <dt><span class="strong">Returns:</span></dt><dd>name, same as used in options in column family</dd></dl>
@@ -474,7 +486,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>isCorrectEncoder</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.167">isCorrectEncoder</a>(org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;encoder,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.168">isCorrectEncoder</a>(org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;encoder,
                        short&nbsp;encoderId)</pre>
 <div class="block">Check if given encoder has this id.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>encoder</code> - encoder which id will be checked</dd><dd><code>encoderId</code> - id which we except</dd>
@@ -489,7 +501,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncodingById</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.180">getEncodingById</a>(short&nbsp;dataBlockEncodingId)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html" title="enum in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.181">getEncodingById</a>(short&nbsp;dataBlockEncodingId)</pre>
 </li>
 </ul>
 <a name="createEncoder(java.lang.String)">
@@ -498,7 +510,7 @@ not permitted.)</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createEncoder</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.184">createEncoder</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fullyQualifiedClassName)</pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html#line.185">createEncoder</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fullyQualifiedClassName)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/apidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html b/apidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
index 25baad1..20ae1c1 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
@@ -24,14 +24,14 @@
 <span class="sourceLineNo">016</span> */<a name="line.16"></a>
 <span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.17"></a>
 <span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>import java.io.IOException;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.OutputStream;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.HashMap;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.Map;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.26"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.OutputStream;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
 <span class="sourceLineNo">027</span><a name="line.27"></a>
 <span class="sourceLineNo">028</span>/**<a name="line.28"></a>
 <span class="sourceLineNo">029</span> * Provide access to all data block encoding algorithms. All of the algorithms<a name="line.29"></a>
@@ -51,157 +51,158 @@
 <span class="sourceLineNo">043</span>  FAST_DIFF(4, "org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder"),<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  // id 5 is reserved for the COPY_KEY algorithm for benchmarking<a name="line.44"></a>
 <span class="sourceLineNo">045</span>  // COPY_KEY(5, "org.apache.hadoop.hbase.io.encoding.CopyKeyDataBlockEncoder"),<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  PREFIX_TREE(6, "org.apache.hadoop.hbase.codec.prefixtree.PrefixTreeCodec");<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final short id;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private final byte[] idInBytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private DataBlockEncoder encoder;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private final String encoderCls;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  public static final int ID_SIZE = Bytes.SIZEOF_SHORT;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  /** Maps data block encoding ids to enum instances. */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static Map&lt;Short, DataBlockEncoding&gt; idToEncoding =<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      new HashMap&lt;Short, DataBlockEncoding&gt;();<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  static {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    for (DataBlockEncoding algo : values()) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      if (idToEncoding.containsKey(algo.id)) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>        throw new RuntimeException(String.format(<a name="line.62"></a>
-<span class="sourceLineNo">063</span>            "Two data block encoder algorithms '%s' and '%s' have " +<a name="line.63"></a>
-<span class="sourceLineNo">064</span>            "the same id %d",<a name="line.64"></a>
-<span class="sourceLineNo">065</span>            idToEncoding.get(algo.id).toString(), algo.toString(),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>            (int) algo.id));<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      idToEncoding.put(algo.id, algo);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private DataBlockEncoding(int id, String encoderClsName) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    if (id &lt; Short.MIN_VALUE || id &gt; Short.MAX_VALUE) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      throw new AssertionError(<a name="line.74"></a>
-<span class="sourceLineNo">075</span>          "Data block encoding algorithm id is out of range: " + id);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this.id = (short) id;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    this.idInBytes = Bytes.toBytes(this.id);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    if (idInBytes.length != ID_SIZE) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      // White this may seem redundant, if we accidentally serialize<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      // the id as e.g. an int instead of a short, all encoders will break.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      throw new RuntimeException("Unexpected length of encoder ID byte " +<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          "representation: " + Bytes.toStringBinary(idInBytes));<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.encoderCls = encoderClsName;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * @return name converted to bytes.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public byte[] getNameInBytes() {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    return Bytes.toBytes(toString());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @return The id of a data block encoder.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public short getId() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    return id;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  /**<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * Writes id in bytes.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @param stream where the id should be written.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public void writeIdInBytes(OutputStream stream) throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    stream.write(idInBytes);<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">046</span>  PREFIX_TREE(6, "org.apache.hadoop.hbase.codec.prefixtree.PrefixTreeCodec"),<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  ROW_INDEX_V1(7, "org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1");<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final short id;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final byte[] idInBytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private DataBlockEncoder encoder;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private final String encoderCls;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final int ID_SIZE = Bytes.SIZEOF_SHORT;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  /** Maps data block encoding ids to enum instances. */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static Map&lt;Short, DataBlockEncoding&gt; idToEncoding =<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      new HashMap&lt;Short, DataBlockEncoding&gt;();<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  static {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    for (DataBlockEncoding algo : values()) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      if (idToEncoding.containsKey(algo.id)) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>        throw new RuntimeException(String.format(<a name="line.63"></a>
+<span class="sourceLineNo">064</span>            "Two data block encoder algorithms '%s' and '%s' have " +<a name="line.64"></a>
+<span class="sourceLineNo">065</span>            "the same id %d",<a name="line.65"></a>
+<span class="sourceLineNo">066</span>            idToEncoding.get(algo.id).toString(), algo.toString(),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>            (int) algo.id));<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      idToEncoding.put(algo.id, algo);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private DataBlockEncoding(int id, String encoderClsName) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    if (id &lt; Short.MIN_VALUE || id &gt; Short.MAX_VALUE) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      throw new AssertionError(<a name="line.75"></a>
+<span class="sourceLineNo">076</span>          "Data block encoding algorithm id is out of range: " + id);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    this.id = (short) id;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    this.idInBytes = Bytes.toBytes(this.id);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    if (idInBytes.length != ID_SIZE) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      // White this may seem redundant, if we accidentally serialize<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      // the id as e.g. an int instead of a short, all encoders will break.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      throw new RuntimeException("Unexpected length of encoder ID byte " +<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          "representation: " + Bytes.toStringBinary(idInBytes));<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.encoderCls = encoderClsName;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @return name converted to bytes.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public byte[] getNameInBytes() {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    return Bytes.toBytes(toString());<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  /**<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return The id of a data block encoder.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public short getId() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return id;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<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>   * Writes id in bytes.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param stream where the id should be written.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public void writeIdInBytes(OutputStream stream) throws IOException {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    stream.write(idInBytes);<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>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Writes id bytes to the given array starting from offset.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   *<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param dest output array<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param offset starting offset of the output array<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @throws IOException<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void writeIdInBytes(byte[] dest, int offset) throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    System.arraycopy(idInBytes, 0, dest, offset, ID_SIZE);<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>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Return new data block encoder for given algorithm type.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @return data block encoder if algorithm is specified, null if none is<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   *         selected.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public DataBlockEncoder getEncoder() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (encoder == null &amp;&amp; id != 0) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      // lazily create the encoder<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      encoder = createEncoder(encoderCls);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return encoder;<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>  /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * Find and create data block encoder for given id;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param encoderId id of data block encoder.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return Newly created data block encoder.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public static DataBlockEncoder getDataBlockEncoderById(short encoderId) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      throw new IllegalArgumentException(String.format(<a name="line.142"></a>
-<span class="sourceLineNo">143</span>          "There is no data block encoder for given id '%d'",<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          (int) encoderId));<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>    return idToEncoding.get(encoderId).getEncoder();<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Find and return the name of data block encoder for the given id.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @param encoderId id of data block encoder<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @return name, same as used in options in column family<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static String getNameFromId(short encoderId) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    return idToEncoding.get(encoderId).toString();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * Check if given encoder has this id.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param encoder encoder which id will be checked<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param encoderId id which we except<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * @return true if id is right for given encoder, false otherwise<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @exception IllegalArgumentException<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   *            thrown when there is no matching data block encoder<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public static boolean isCorrectEncoder(DataBlockEncoder encoder,<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      short encoderId) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      throw new IllegalArgumentException(String.format(<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          "There is no data block encoder for given id '%d'",<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          (int) encoderId));<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>    DataBlockEncoding algorithm = idToEncoding.get(encoderId);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    String encoderCls = encoder.getClass().getName();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return encoderCls.equals(algorithm.encoderCls);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public static DataBlockEncoding getEncodingById(short dataBlockEncodingId) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return idToEncoding.get(dataBlockEncodingId);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  protected static DataBlockEncoder createEncoder(String fullyQualifiedClassName){<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        return (DataBlockEncoder)Class.forName(fullyQualifiedClassName).newInstance();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      } catch (InstantiationException e) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        throw new RuntimeException(e);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      } catch (IllegalAccessException e) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        throw new RuntimeException(e);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } catch (ClassNotFoundException e) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        throw new IllegalArgumentException(e);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>}<a name="line.196"></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>   * Writes id bytes to the given array starting from offset.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param dest output array<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param offset starting offset of the output array<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @throws IOException<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public void writeIdInBytes(byte[] dest, int offset) throws IOException {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    System.arraycopy(idInBytes, 0, dest, offset, ID_SIZE);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * Return new data block encoder for given algorithm type.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @return data block encoder if algorithm is specified, null if none is<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   *         selected.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public DataBlockEncoder getEncoder() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (encoder == null &amp;&amp; id != 0) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      // lazily create the encoder<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      encoder = createEncoder(encoderCls);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return encoder;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Find and create data block encoder for given id;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param encoderId id of data block encoder.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return Newly created data block encoder.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public static DataBlockEncoder getDataBlockEncoderById(short encoderId) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      throw new IllegalArgumentException(String.format(<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          "There is no data block encoder for given id '%d'",<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          (int) encoderId));<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>    return idToEncoding.get(encoderId).getEncoder();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Find and return the name of data block encoder for the given id.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param encoderId id of data block encoder<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @return name, same as used in options in column family<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public static String getNameFromId(short encoderId) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return idToEncoding.get(encoderId).toString();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Check if given encoder has this id.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param encoder encoder which id will be checked<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param encoderId id which we except<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @return true if id is right for given encoder, false otherwise<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @exception IllegalArgumentException<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   *            thrown when there is no matching data block encoder<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public static boolean isCorrectEncoder(DataBlockEncoder encoder,<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      short encoderId) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      throw new IllegalArgumentException(String.format(<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          "There is no data block encoder for given id '%d'",<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          (int) encoderId));<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>    DataBlockEncoding algorithm = idToEncoding.get(encoderId);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    String encoderCls = encoder.getClass().getName();<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return encoderCls.equals(algorithm.encoderCls);<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>  public static DataBlockEncoding getEncodingById(short dataBlockEncodingId) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return idToEncoding.get(dataBlockEncodingId);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  protected static DataBlockEncoder createEncoder(String fullyQualifiedClassName){<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        return (DataBlockEncoder)Class.forName(fullyQualifiedClassName).newInstance();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      } catch (InstantiationException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        throw new RuntimeException(e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      } catch (IllegalAccessException e) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        throw new RuntimeException(e);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      } catch (ClassNotFoundException e) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        throw new IllegalArgumentException(e);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>}<a name="line.197"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index d0c73fb..dab4b7f 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="20160825" />
+    <meta name="Date-Revision-yyyymmdd" content="20160829" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-25</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-29</li>
             </p>
                 </div>
 


[46/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html b/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html
new file mode 100644
index 0000000..e35ce9e
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.exceptions.UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.exceptions.UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html" target="_top">Frames</a></li>
+<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.exceptions.UnexpectedStateException" class="title">Uses of Class<br>org.apache.hadoop.hbase.exceptions.UnexpectedStateException</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a> in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a> that throw <a href="../../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">AbstractMemStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#clearSnapshot(long)">clearSnapshot</a></strong>(long&nbsp;id)</code>
+<div class="block">The passed snapshot was successfully persisted; it can be let go.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">MemStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#clearSnapshot(long)">clearSnapshot</a></strong>(long&nbsp;id)</code>
+<div class="block">Clears the current snapshot of the Memstore.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html" target="_top">Frames</a></li>
+<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/package-frame.html b/devapidocs/org/apache/hadoop/hbase/exceptions/package-frame.html
index 0e3dfb2..a60ed98 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/package-frame.html
@@ -29,6 +29,7 @@
 <li><a href="RegionMovedException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">RegionMovedException</a></li>
 <li><a href="RegionOpeningException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">RegionOpeningException</a></li>
 <li><a href="TimeoutIOException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">TimeoutIOException</a></li>
+<li><a href="UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">UnexpectedStateException</a></li>
 <li><a href="UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">UnknownProtocolException</a></li>
 </ul>
 </div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/package-summary.html b/devapidocs/org/apache/hadoop/hbase/exceptions/package-summary.html
index 2f325a3..2f1088d 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/package-summary.html
@@ -176,6 +176,10 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions">UnknownProtocolException</a></td>
 <td class="colLast">
 <div class="block">An error requesting an RPC protocol that the server is not serving.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/package-tree.html b/devapidocs/org/apache/hadoop/hbase/exceptions/package-tree.html
index bc9654c..df6767a 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/package-tree.html
@@ -102,6 +102,7 @@
 <li type="circle">org.apache.hadoop.hbase.exceptions.<a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">UnknownProtocolException</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.exceptions.<a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">UnexpectedStateException</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.exceptions.<a href="../../../../../org/apache/hadoop/hbase/exceptions/IllegalArgumentIOException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">IllegalArgumentIOException</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/package-use.html b/devapidocs/org/apache/hadoop/hbase/exceptions/package-use.html
index ff254ee..d6e01b4 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/package-use.html
@@ -301,6 +301,9 @@
 <div class="block">Exception thrown if a mutation fails sanity checks.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/exceptions/class-use/UnexpectedStateException.html#org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 81947a4..eb73ae96 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -161,13 +161,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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="strong">RegexStringComparator.EngineType</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="strong">Filter.ReturnCode</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="strong">BitComparator.BitwiseOp</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="strong">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterWrapper.FilterRowRetCode</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="strong">CompareFilter.CompareOp</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="strong">BitComparator.BitwiseOp</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="strong">Filter.ReturnCode</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="strong">RegexStringComparator.EngineType</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="strong">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="strong">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="strong">FilterWrapper.FilterRowRetCode</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="strong">FuzzyRowFilter.SatisfiesCode</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/class-use/ByteArrayOutputStream.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/class-use/ByteArrayOutputStream.html b/devapidocs/org/apache/hadoop/hbase/io/class-use/ByteArrayOutputStream.html
index ae97281..426b68a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/class-use/ByteArrayOutputStream.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/class-use/ByteArrayOutputStream.html
@@ -75,13 +75,17 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.io.encoding">org.apache.hadoop.hbase.io.encoding</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.io.hfile">org.apache.hadoop.hbase.io.hfile</a></td>
 <td class="colLast">
 <div class="block">Provides implementations of <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFile</code></a> and HFile
  <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile"><code>BlockCache</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.wal">org.apache.hadoop.hbase.regionserver.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -90,6 +94,24 @@
 </li>
 <li class="blockList">
 <ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.io.encoding">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteArrayOutputStream</a> in <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteArrayOutputStream</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteArrayOutputStream</a></code></td>
+<td class="colLast"><span class="strong">RowIndexEncoderV1.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#rowsOffsetBAOS">rowsOffsetBAOS</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.io.hfile">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
index 260ef48..832f37b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1122">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.1133">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html" title="class in org.apache.hadoop.hbase.io.encoding">EncodingState</a></pre>
 </li>
 </ul>
@@ -190,7 +190,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingS
 <ul class="blockListLast">
 <li class="blockList">
 <h4>unencodedDataSizeWritten</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html#line.1123">unencodedDataSizeWritten</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html#line.1134">unencodedDataSizeWritten</a></pre>
 </li>
 </ul>
 </li>
@@ -207,7 +207,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/EncodingS
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferedDataBlockEncoder.BufferedDataBlockEncodingState</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html#line.1122">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedDataBlockEncodingState.html#line.1133">BufferedDataBlockEncoder.BufferedDataBlockEncodingState</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
index 73fbcdc..f8565c4 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected abstract static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.691">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>&lt;STATE extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&gt;
+<pre>protected abstract static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.697">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>&lt;STATE extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&gt;
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></pre>
 </li>
@@ -294,6 +294,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <div class="block">Set on which buffer there will be done seeking.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#tagsCompressed()">tagsCompressed</a></strong>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -322,7 +326,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>decodingCtx</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.694">decodingCtx</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.700">decodingCtx</a></pre>
 </li>
 </ul>
 <a name="comparator">
@@ -331,7 +335,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>comparator</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.695">comparator</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.701">comparator</a></pre>
 </li>
 </ul>
 <a name="currentBuffer">
@@ -340,7 +344,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>currentBuffer</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.696">currentBuffer</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.702">currentBuffer</a></pre>
 </li>
 </ul>
 <a name="tagCompressionContext">
@@ -349,7 +353,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>tagCompressionContext</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/TagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TagCompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.697">tagCompressionContext</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/TagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TagCompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.703">tagCompressionContext</a></pre>
 </li>
 </ul>
 <a name="keyOnlyKV">
@@ -358,7 +362,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>keyOnlyKV</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.698">keyOnlyKV</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.704">keyOnlyKV</a></pre>
 </li>
 </ul>
 <a name="tmpPair">
@@ -367,7 +371,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>tmpPair</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.701">tmpPair</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.707">tmpPair</a></pre>
 </li>
 </ul>
 <a name="current">
@@ -376,7 +380,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>current</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="type parameter in BufferedDataBlockEncoder.BufferedEncodedSeeker">STATE</a> extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.702">current</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="type parameter in BufferedDataBlockEncoder.BufferedEncodedSeeker">STATE</a> extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.708">current</a></pre>
 </li>
 </ul>
 <a name="previous">
@@ -385,7 +389,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>previous</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="type parameter in BufferedDataBlockEncoder.BufferedEncodedSeeker">STATE</a> extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.702">previous</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="type parameter in BufferedDataBlockEncoder.BufferedEncodedSeeker">STATE</a> extends <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.708">previous</a></pre>
 </li>
 </ul>
 </li>
@@ -402,7 +406,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferedDataBlockEncoder.BufferedEncodedSeeker</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.704">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.710">BufferedDataBlockEncoder.BufferedEncodedSeeker</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                                               <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</pre>
 </li>
 </ul>
@@ -420,7 +424,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>includesMvcc</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.719">includesMvcc</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.725">includesMvcc</a>()</pre>
 </li>
 </ul>
 <a name="includesTags()">
@@ -429,7 +433,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>includesTags</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.723">includesTags</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.729">includesTags</a>()</pre>
+</li>
+</ul>
+<a name="tagsCompressed()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tagsCompressed</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.733">tagsCompressed</a>()</pre>
 </li>
 </ul>
 <a name="compareKey(org.apache.hadoop.hbase.CellComparator, org.apache.hadoop.hbase.Cell)">
@@ -438,7 +451,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareKey</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.728">compareKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.738">compareKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
              <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">Compare the given key against the current key</div>
@@ -454,7 +467,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCurrentBuffer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.734">setCurrentBuffer</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.744">setCurrentBuffer</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">Set on which buffer there will be done seeking.</div>
 <dl>
@@ -469,7 +482,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>getKey</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.749">getKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.759">getKey</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getKey()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">From the current position creates a cell using the key part
  of the current buffer</div>
@@ -485,7 +498,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueShallowCopy</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.756">getValueShallowCopy</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.766">getValueShallowCopy</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getValueShallowCopy()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">Does a shallow copy of the value at the current position. A shallow
  copy is possible because the returned buffer refers to the backing array
@@ -502,7 +515,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>getCell</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.765">getCell</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.775">getCell</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getCell()">getCell</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></dd>
@@ -515,7 +528,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>rewind</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.770">rewind</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.780">rewind</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#rewind()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">Set position to beginning of given block</div>
 <dl>
@@ -530,7 +543,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.781">next</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.791">next</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#next()">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">Move to next position</div>
 <dl>
@@ -545,7 +558,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>decodeTags</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.791">decodeTags</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.801">decodeTags</a>()</pre>
 </li>
 </ul>
 <a name="seekToKeyInBlock(org.apache.hadoop.hbase.Cell, boolean)">
@@ -554,7 +567,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>seekToKeyInBlock</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.817">seekToKeyInBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.827">seekToKeyInBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
                    boolean&nbsp;seekBefore)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">DataBlockEncoder.EncodedSeeker</a></code></strong></div>
 <div class="block">Moves the seeker position within the current block to:
@@ -580,7 +593,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTypeBytes</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.916">compareTypeBytes</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.926">compareTypeBytes</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
                    <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 </li>
 </ul>
@@ -590,7 +603,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefixInRowPart</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.929">findCommonPrefixInRowPart</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.939">findCommonPrefixInRowPart</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                             <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
                             int&nbsp;rowCommonPrefix)</pre>
 </li>
@@ -601,7 +614,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefixInFamilyPart</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.935">findCommonPrefixInFamilyPart</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.945">findCommonPrefixInFamilyPart</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
                                int&nbsp;familyCommonPrefix)</pre>
 </li>
@@ -612,7 +625,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefixInQualifierPart</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.943">findCommonPrefixInQualifierPart</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.953">findCommonPrefixInQualifierPart</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                   <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
                                   int&nbsp;qualifierCommonPrefix)</pre>
 </li>
@@ -623,7 +636,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>moveToPrevious</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.951">moveToPrevious</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.961">moveToPrevious</a>()</pre>
 </li>
 </ul>
 <a name="createSeekerState()">
@@ -632,7 +645,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>createSeekerState</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="type parameter in BufferedDataBlockEncoder.BufferedEncodedSeeker">STATE</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.978">createSeekerState</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html" title="type parameter in BufferedDataBlockEncoder.BufferedEncodedSeeker">STATE</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.988">createSeekerState</a>()</pre>
 </li>
 </ul>
 <a name="decodeFirst()">
@@ -641,7 +654,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockList">
 <li class="blockList">
 <h4>decodeFirst</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.984">decodeFirst</a>()</pre>
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.995">decodeFirst</a>()</pre>
 </li>
 </ul>
 <a name="decodeNext()">
@@ -650,7 +663,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>decodeNext</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.985">decodeNext</a>()</pre>
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#line.996">decodeNext</a>()</pre>
 </li>
 </ul>
 </li>


[24/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
index 66dbcf3..7293a11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
@@ -130,7 +130,7 @@
 <span class="sourceLineNo">122</span><a name="line.122"></a>
 <span class="sourceLineNo">123</span>    /** We need to store a copy of the key. */<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    protected byte[] keyBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    protected byte[] tagsBuffer = null;<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    protected long memstoreTS;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    protected int nextKvOffset;<a name="line.128"></a>
@@ -140,1035 +140,1046 @@
 <span class="sourceLineNo">132</span>    private final ObjectIntPair&lt;ByteBuffer&gt; tmpPair;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    private final boolean includeTags;<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.tmpPair = tmpPair;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.includeTags = includeTags;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected boolean isValid() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return valueOffset != -1;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    protected void invalidate() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      valueOffset = -1;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      tagsCompressedLength = 0;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      uncompressTags = true;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      currentBuffer = null;<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>    protected void ensureSpaceForKey() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // rare case, but we need to handle arbitrary length of key<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          newKeyBufferLength *= 2;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        keyBuffer = newKeyBuffer;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    protected void ensureSpaceForTags() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          newTagsBufferLength *= 2;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        tagsBuffer = newTagsBuffer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      memstoreTS = memTS;<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>    /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     * Copy the state from the next one into this instance (the previous state<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     * seeker to the next key/value.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>     */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else if (!isValid()) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Note: we can only call isValid before we override our state, so this<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // comes before all the assignments at the end of this method.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>             nextState.keyLength);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // don't copy the common prefix between this key and the previous one<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                - nextState.lastCommonPrefix);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentKey = nextState.currentKey;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      valueOffset = nextState.valueOffset;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      keyLength = nextState.keyLength;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      valueLength = nextState.valueLength;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      memstoreTS = nextState.memstoreTS;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      currentBuffer = nextState.currentBuffer;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      tagsOffset = nextState.tagsOffset;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      tagsLength = nextState.tagsLength;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (nextState.tagCompressionContext != null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        tagCompressionContext = nextState.tagCompressionContext;<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>    public Cell toCell() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ByteBuffer valAndTagsBuffer;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      int vOffset;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int valAndTagsLength = this.valueLength;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int tagsLenSerializationSize = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // length<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        int tagsLenSerializationSize) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      int tOffset = 0;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (this.includeTags) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (this.tagCompressionContext == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          tagsArray = valAndTagsBuffer.array();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              + tagsLenSerializationSize;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        } else {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          tOffset = 0;<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>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          tOffset, this.tagsLength);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int tagsLenSerializationSize) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      int tOffset = 0;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.includeTags) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        if (this.tagCompressionContext == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          tagsBuf = valAndTagsBuffer;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        } else {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          tOffset = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * seeker state members for taking a clone.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * represented by the valueOffset and valueLength<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Streamable {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    private byte[] keyOnlyBuffer;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    private short rowLength;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    private int familyOffset;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    private byte familyLength;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    private int qualifierOffset;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    private int qualifierLength;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    private long timestamp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    private byte typeByte;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    private byte[] valueBuffer;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    private int valueOffset;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    private int valueLength;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    private byte[] tagsBuffer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    private int tagsOffset;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    private int tagsLength;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    private long seqId;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        int tagsOffset, int tagsLength) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      this.rowLength = rowLength;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      this.familyOffset = familyOffset;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.familyLength = familyLength;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      this.qualifierOffset = qualOffset;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.qualifierLength = qualLength;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      this.timestamp = timeStamp;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      this.typeByte = typeByte;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      this.valueBuffer = valueBuffer;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.valueOffset = valueOffset;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.valueLength = valueLen;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.tagsBuffer = tagsBuffer;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.tagsOffset = tagsOffset;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.tagsLength = tagsLength;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      setSequenceId(seqId);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public byte[] getRowArray() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return keyOnlyBuffer;<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>    @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public byte[] getFamilyArray() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return keyOnlyBuffer;<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>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public byte[] getQualifierArray() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return keyOnlyBuffer;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public int getRowOffset() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return Bytes.SIZEOF_SHORT;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public short getRowLength() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return rowLength;<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>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public int getFamilyOffset() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return familyOffset;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public byte getFamilyLength() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return familyLength;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public int getQualifierOffset() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return qualifierOffset;<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public int getQualifierLength() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return qualifierLength;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public long getTimestamp() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      return timestamp;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public byte getTypeByte() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return typeByte;<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>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public long getSequenceId() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return seqId;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public byte[] getValueArray() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return this.valueBuffer;<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>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public int getValueOffset() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return valueOffset;<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>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public int getValueLength() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return valueLength;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    public byte[] getTagsArray() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      return this.tagsBuffer;<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>    @Override<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    public int getTagsOffset() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return this.tagsOffset;<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>    @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    public int getTagsLength() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return tagsLength;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    @Override<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    public String toString() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.427"></a>
+<span class="sourceLineNo">135</span>    public SeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        boolean tagsCompressed) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.tmpPair = tmpPair;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.includeTags = includeTags;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      if (tagsCompressed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        tagsBuffer = new byte[INITIAL_KEY_BUFFER_SIZE];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        tagsBuffer = HConstants.EMPTY_BYTE_ARRAY;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    protected boolean isValid() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return valueOffset != -1;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    protected void invalidate() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      valueOffset = -1;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      tagsCompressedLength = 0;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      currentKey = new KeyValue.KeyOnlyKeyValue();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      uncompressTags = true;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      currentBuffer = null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    protected void ensureSpaceForKey() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if (keyLength &gt; keyBuffer.length) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        // rare case, but we need to handle arbitrary length of key<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        int newKeyBufferLength = Math.max(keyBuffer.length, 1) * 2;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        while (keyLength &gt; newKeyBufferLength) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          newKeyBufferLength *= 2;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        byte[] newKeyBuffer = new byte[newKeyBufferLength];<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        System.arraycopy(keyBuffer, 0, newKeyBuffer, 0, keyBuffer.length);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        keyBuffer = newKeyBuffer;<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><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    protected void ensureSpaceForTags() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      if (tagsLength &gt; tagsBuffer.length) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        // rare case, but we need to handle arbitrary length of tags<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        int newTagsBufferLength = Math.max(tagsBuffer.length, 1) * 2;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        while (tagsLength &gt; newTagsBufferLength) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          newTagsBufferLength *= 2;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        byte[] newTagsBuffer = new byte[newTagsBufferLength];<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        System.arraycopy(tagsBuffer, 0, newTagsBuffer, 0, tagsBuffer.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        tagsBuffer = newTagsBuffer;<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><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    protected void setKey(byte[] keyBuffer, long memTS) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      currentKey.setKey(keyBuffer, 0, keyLength);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      memstoreTS = memTS;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>     * Copy the state from the next one into this instance (the previous state<a name="line.190"></a>
+<span class="sourceLineNo">191</span>     * placeholder). Used to save the previous state when we are advancing the<a name="line.191"></a>
+<span class="sourceLineNo">192</span>     * seeker to the next key/value.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (keyBuffer.length != nextState.keyBuffer.length) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        keyBuffer = nextState.keyBuffer.clone();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else if (!isValid()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        // Note: we can only call isValid before we override our state, so this<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // comes before all the assignments at the end of this method.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        System.arraycopy(nextState.keyBuffer, 0, keyBuffer, 0,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>             nextState.keyLength);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        // don't copy the common prefix between this key and the previous one<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        System.arraycopy(nextState.keyBuffer, nextState.lastCommonPrefix,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            keyBuffer, nextState.lastCommonPrefix, nextState.keyLength<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                - nextState.lastCommonPrefix);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentKey = nextState.currentKey;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      valueOffset = nextState.valueOffset;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      keyLength = nextState.keyLength;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      valueLength = nextState.valueLength;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      lastCommonPrefix = nextState.lastCommonPrefix;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      memstoreTS = nextState.memstoreTS;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      currentBuffer = nextState.currentBuffer;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      tagsOffset = nextState.tagsOffset;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      tagsLength = nextState.tagsLength;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (nextState.tagCompressionContext != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tagCompressionContext = nextState.tagCompressionContext;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public Cell toCell() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Buffer backing the value and tags part from the HFileBlock's buffer<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // When tag compression in use, this will be only the value bytes area.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      ByteBuffer valAndTagsBuffer;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      int vOffset;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      int valAndTagsLength = this.valueLength;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int tagsLenSerializationSize = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (this.includeTags &amp;&amp; this.tagCompressionContext == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // Include the tags part also. This will be the tags bytes + 2 bytes of for storing tags<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        // length<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        tagsLenSerializationSize = this.tagsOffset - (this.valueOffset + this.valueLength);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        valAndTagsLength += tagsLenSerializationSize + this.tagsLength;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.currentBuffer.asSubByteBuffer(this.valueOffset, valAndTagsLength, this.tmpPair);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valAndTagsBuffer = this.tmpPair.getFirst();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      vOffset = this.tmpPair.getSecond();// This is the offset to value part in the BB<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (valAndTagsBuffer.hasArray()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return toOnheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return toOffheapCell(valAndTagsBuffer, vOffset, tagsLenSerializationSize);<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><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    private Cell toOnheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        int tagsLenSerializationSize) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      byte[] tagsArray = HConstants.EMPTY_BYTE_ARRAY;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      int tOffset = 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (this.includeTags) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (this.tagCompressionContext == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          tagsArray = valAndTagsBuffer.array();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              + tagsLenSerializationSize;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          tOffset = 0;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer.array(),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          tOffset, this.tagsLength);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        int tagsLenSerializationSize) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ByteBuffer tagsBuf =  HConstants.EMPTY_BYTE_BUFFER;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      int tOffset = 0;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      if (this.includeTags) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        if (this.tagCompressionContext == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          tagsBuf = valAndTagsBuffer;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          tOffset = vOffset + this.valueLength + tagsLenSerializationSize;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          tOffset = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return new OffheapDecodedCell(ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(),<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          currentKey.getQualifierOffset(), currentKey.getQualifierLength(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          currentKey.getTimestamp(), currentKey.getTypeByte(), valAndTagsBuffer, vOffset,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          this.valueLength, memstoreTS, tagsBuf, tOffset, this.tagsLength);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Copies only the key part of the keybuffer by doing a deep copy and passes the<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * seeker state members for taking a clone.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Note that the value byte[] part is still pointing to the currentBuffer and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * represented by the valueOffset and valueLength<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // We return this as a Cell to the upper layers of read flow and might try setting a new SeqId<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // there. So this has to be an instance of SettableSequenceId.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static class OnheapDecodedCell implements Cell, HeapSize, SettableSequenceId,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      Streamable {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.ARRAY));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    private byte[] keyOnlyBuffer;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    private short rowLength;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    private int familyOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    private byte familyLength;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private int qualifierOffset;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    private int qualifierLength;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private long timestamp;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private byte typeByte;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    private byte[] valueBuffer;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    private int valueOffset;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    private int valueLength;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    private byte[] tagsBuffer;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    private int tagsOffset;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    private int tagsLength;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    private long seqId;<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected OnheapDecodedCell(byte[] keyBuffer, short rowLength, int familyOffset,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        byte[] valueBuffer, int valueOffset, int valueLen, long seqId, byte[] tagsBuffer,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int tagsOffset, int tagsLength) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      this.keyOnlyBuffer = keyBuffer;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      this.rowLength = rowLength;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      this.familyOffset = familyOffset;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      this.familyLength = familyLength;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.qualifierOffset = qualOffset;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.qualifierLength = qualLength;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.timestamp = timeStamp;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.typeByte = typeByte;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.valueBuffer = valueBuffer;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.valueOffset = valueOffset;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.valueLength = valueLen;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.tagsBuffer = tagsBuffer;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.tagsOffset = tagsOffset;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.tagsLength = tagsLength;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setSequenceId(seqId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    public byte[] getRowArray() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return keyOnlyBuffer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public byte[] getFamilyArray() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return keyOnlyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    @Override<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public byte[] getQualifierArray() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return keyOnlyBuffer;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public int getRowOffset() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return Bytes.SIZEOF_SHORT;<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>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public short getRowLength() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return rowLength;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    public int getFamilyOffset() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return familyOffset;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public byte getFamilyLength() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return familyLength;<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public int getQualifierOffset() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return qualifierOffset;<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>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public int getQualifierLength() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return qualifierLength;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    public long getTimestamp() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return timestamp;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    public byte getTypeByte() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return typeByte;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public long getSequenceId() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return seqId;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public byte[] getValueArray() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return this.valueBuffer;<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>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public int getValueOffset() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      return valueOffset;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    public int getValueLength() {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return valueLength;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public byte[] getTagsArray() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return this.tagsBuffer;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public int getTagsOffset() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return this.tagsOffset;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public int getTagsLength() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return tagsLength;<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>    @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    public void setSequenceId(long seqId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.seqId = seqId;<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>    @Override<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public long heapSize() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    public int write(OutputStream out) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return write(out, true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          tagsLength, withTags);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // Write key<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      out.write(keyOnlyBuffer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // Write value<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (withTags) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        // 2 bytes tags length followed by tags bytes<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      SettableSequenceId, Streamable {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    private static final long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        + (3 * ClassSize.REFERENCE) + (2 * Bytes.SIZEOF_LONG) + (7 * Bytes.SIZEOF_INT)<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        + (Bytes.SIZEOF_SHORT) + (2 * Bytes.SIZEOF_BYTE) + (3 * ClassSize.BYTE_BUFFER));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private ByteBuffer keyBuffer;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    private short rowLength;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    private int familyOffset;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private byte familyLength;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private int qualifierOffset;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    private int qualifierLength;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private long timestamp;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    private byte typeByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private ByteBuffer valueBuffer;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    private int valueOffset;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    private int valueLength;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    private ByteBuffer tagsBuffer;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    private int tagsOffset;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    private int tagsLength;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    private long seqId;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    protected OffheapDecodedCell(ByteBuffer keyBuffer, short rowLength, int familyOffset,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        byte familyLength, int qualOffset, int qualLength, long timeStamp, byte typeByte,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        ByteBuffer valueBuffer, int valueOffset, int valueLen, long seqId, ByteBuffer tagsBuffer,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        int tagsOffset, int tagsLength) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // The keyBuffer is always onheap<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      assert keyBuffer.hasArray();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      assert keyBuffer.arrayOffset() == 0;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this.keyBuffer = keyBuffer;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.rowLength = rowLength;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      this.familyOffset = familyOffset;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      this.familyLength = familyLength;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.qualifierOffset = qualOffset;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.qualifierLength = qualLength;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.timestamp = timeStamp;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.typeByte = typeByte;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.valueBuffer = valueBuffer;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.valueOffset = valueOffset;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      this.valueLength = valueLen;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      this.tagsBuffer = tagsBuffer;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.tagsOffset = tagsOffset;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.tagsLength = tagsLength;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      setSequenceId(seqId);<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>    @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public byte[] getRowArray() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      return this.keyBuffer.array();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public int getRowOffset() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return getRowPosition();<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>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public short getRowLength() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.rowLength;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public byte[] getFamilyArray() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.keyBuffer.array();<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>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public int getFamilyOffset() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      return getFamilyPosition();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public byte getFamilyLength() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.familyLength;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public byte[] getQualifierArray() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.keyBuffer.array();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @Override<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    public int getQualifierOffset() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return getQualifierPosition();<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>    @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    public int getQualifierLength() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.qualifierLength;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public long getTimestamp() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.timestamp;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public byte getTypeByte() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      return this.typeByte;<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>    @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    public long getSequenceId() {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      return this.seqId;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    public byte[] getValueArray() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      return CellUtil.cloneValue(this);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public int getValueOffset() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      return 0;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>    @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    public int getValueLength() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.valueLength;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    public byte[] getTagsArray() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return CellUtil.cloneTags(this);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    public int getTagsOffset() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return 0;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public int getTagsLength() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      return this.tagsLength;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    public ByteBuffer getRowByteBuffer() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.keyBuffer;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    public int getRowPosition() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      return Bytes.SIZEOF_SHORT;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    public ByteBuffer getFamilyByteBuffer() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return this.keyBuffer;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    @Override<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    public int getFamilyPosition() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.familyOffset;<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>    @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    public ByteBuffer getQualifierByteBuffer() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return this.keyBuffer;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>    @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    public int getQualifierPosition() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      return this.qualifierOffset;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    @Override<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    public ByteBuffer getValueByteBuffer() {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.valueBuffer;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    @Override<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public int getValuePosition() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return this.valueOffset;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    @Override<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    public ByteBuffer getTagsByteBuffer() {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      return this.tagsBuffer;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    @Override<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    public int getTagsPosition() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.tagsOffset;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public long heapSize() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>    @Override<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    public void setSequenceId(long seqId) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      this.seqId = seqId;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    @Override<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    public int write(OutputStream out) throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return write(out, true);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          tagsLength, withTags);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      ByteBufferUtils.putInt(out, keyBuffer.capacity());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Write key<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      out.write(keyBuffer.array());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Write value<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      ByteBufferUtils.copyBufferToStream(out, this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (withTags) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // 2 bytes tags length followed by tags bytes<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        ByteBufferUtils.copyBufferToStream(out, this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      return lenToWrite + Bytes.SIZEOF_INT;<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>  protected abstract static class<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      BufferedEncodedSeeker&lt;STATE extends SeekerState&gt;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      implements EncodedSeeker {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    protected HFileBlockDecodingContext decodingCtx;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    protected final CellComparator comparator;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    protected ByteBuff currentBuffer;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    protected TagCompressionContext tagCompressionContext = null;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    protected  KeyValue.KeyOnlyKeyValue keyOnlyKV = new KeyValue.KeyOnlyKeyValue();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // many object creations.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    protected STATE current, previous;<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    public BufferedEncodedSeeker(CellComparator comparator,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        HFileBlockDecodingContext decodingCtx) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      this.comparator = comparator;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      this.decodingCtx = decodingCtx;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (decodingCtx.getHFileContext().isCompressTags()) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        try {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          tagCompressionContext = new TagCompressionContext(LRUDictionary.class, Byte.MAX_VALUE);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        } catch (Exception e) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          throw new RuntimeException("Failed to initialize TagCompressionContext", e);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      current = createSeekerState(); // always valid<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      previous = createSeekerState(); // may not be valid<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    protected boolean includesMvcc() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    protected boolean includesTags() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    @Override<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    public int compareKey(CellComparator comparator, Cell key) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      keyOnlyKV.setKey(current.keyBuffer, 0, current.keyLength);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      return comparator.compareKeyIgnoresMvcc(key, keyOnlyKV);<a name="line.730"></a>
+<span class="sourceLineNo">431</span>    public String toString() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      return KeyValue.keyToString(this.keyOnlyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          + getValueLength() + "/seqid=" + seqId;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    public void setSequenceId(long seqId) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      this.seqId = seqId;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public long heapSize() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return FIXED_OVERHEAD + rowLength + familyLength + qualifierLength + valueLength + tagsLength;<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>    @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    public int write(OutputStream out) throws IOException {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return write(out, true);<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>    @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      int lenToWrite = KeyValueUtil.length(rowLength, familyLength, qualifierLength, valueLength,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          tagsLength, withTags);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      ByteBufferUtils.putInt(out, lenToWrite);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      ByteBufferUtils.putInt(out, keyOnlyBuffer.length);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      ByteBufferUtils.putInt(out, valueLength);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      // Write key<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      out.write(keyOnlyBuffer);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      // Write value<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      out.write(this.valueBuffer, this.valueOffset, this.valueLength);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (withTags) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        // 2 bytes tags length followed by tags bytes<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        // tags length is serialized with 2 bytes only(short way) even if the type is int.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        // As this is non -ve numbers, we save the sign bit. See HBASE-11437<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        out.write((byte) (0xff &amp; (this.tagsLength &gt;&gt; 8)));<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        out.write((byte) (0xff &amp; this.tagsLength));<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        out.write(this.tagsBuffer, this.tagsOffset, this.tagsLength);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      return lenToWrite + Bytes.SIZEOF_INT;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      SettableSequenceId, Streamable {<a name="line.475"></a>
+<s

<TRUNCATED>

[04/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
index 7a59e03..ccc41ab 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
@@ -43,440 +43,441 @@
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.ShareableMemory;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * An abstract class, which implements the behaviour shared by all concrete memstore instances.<a name="line.43"></a>
-<span class="sourceLineNo">044</span> */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
-<span class="sourceLineNo">046</span>public abstract class AbstractMemStore implements MemStore {<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final long NO_SNAPSHOT_ID = -1;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private final Configuration conf;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private final CellComparator comparator;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  // active segment absorbs write operations<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private volatile MutableSegment active;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  // Snapshot of memstore.  Made for flusher.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private volatile ImmutableSegment snapshot;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  protected volatile long snapshotId;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // Used to track when to flush<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private volatile long timeOfOldestEdit;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public final static long FIXED_OVERHEAD = ClassSize.align(<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      ClassSize.OBJECT +<a name="line.62"></a>
-<span class="sourceLineNo">063</span>          (4 * ClassSize.REFERENCE) +<a name="line.63"></a>
-<span class="sourceLineNo">064</span>          (2 * Bytes.SIZEOF_LONG));<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public final static long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD +<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      (ClassSize.ATOMIC_LONG + ClassSize.TIMERANGE_TRACKER +<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      ClassSize.CELL_SET + ClassSize.CONCURRENT_SKIPLISTMAP));<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * An abstract class, which implements the behaviour shared by all concrete memstore instances.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public abstract class AbstractMemStore implements MemStore {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final long NO_SNAPSHOT_ID = -1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final Configuration conf;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private final CellComparator comparator;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  // active segment absorbs write operations<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private volatile MutableSegment active;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  // Snapshot of memstore.  Made for flusher.<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private volatile ImmutableSegment snapshot;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  protected volatile long snapshotId;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  // Used to track when to flush<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private volatile long timeOfOldestEdit;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public final static long FIXED_OVERHEAD = ClassSize.align(<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      ClassSize.OBJECT +<a name="line.63"></a>
+<span class="sourceLineNo">064</span>          (4 * ClassSize.REFERENCE) +<a name="line.64"></a>
+<span class="sourceLineNo">065</span>          (2 * Bytes.SIZEOF_LONG));<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public final static long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD +<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      (ClassSize.ATOMIC_LONG + ClassSize.TIMERANGE_TRACKER +<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      ClassSize.CELL_SET + ClassSize.CONCURRENT_SKIPLISTMAP));<a name="line.69"></a>
 <span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected AbstractMemStore(final Configuration conf, final CellComparator c) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    this.conf = conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    this.comparator = c;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    resetActive();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    this.snapshot = SegmentFactory.instance().createImmutableSegment(c, 0);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.snapshotId = NO_SNAPSHOT_ID;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  protected void resetActive() {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    // Reset heap to not include any keys<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    this.active = SegmentFactory.instance().createMutableSegment(conf, comparator, DEEP_OVERHEAD);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.timeOfOldestEdit = Long.MAX_VALUE;<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>  /*<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  * Calculate how the MemStore size has changed.  Includes overhead of the<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  * backing Map.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  * @param cell<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  * @param notPresent True if the cell was NOT present in the set.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  * @return change in size<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  static long heapSizeChange(final Cell cell, final boolean notPresent) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return notPresent ? ClassSize.align(ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        + CellUtil.estimatedHeapSizeOf(cell)) : 0;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * Updates the wal with the lowest sequence id (oldest entry) that is still in memory<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @param onlyIfMoreRecent a flag that marks whether to update the sequence id no matter what or<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   *                      only if it is greater than the previous sequence id<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public abstract void updateLowestUnflushedSequenceIdInWAL(boolean onlyIfMoreRecent);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * Write an update<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @param cell the cell to be added<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @return approximate size of the passed cell &amp; newly added cell which maybe different than the<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *         passed-in cell<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  @Override<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public long add(Cell cell) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    Cell toAdd = maybeCloneWithAllocator(cell);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    boolean mslabUsed = (toAdd != cell);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // This cell data is backed by the same byte[] where we read request in RPC(See HBASE-15180). By<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    // default MSLAB is ON and we might have copied cell to MSLAB area. If not we must do below deep<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // copy. Or else we will keep referring to the bigger chunk of memory and prevent it from<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    // getting GCed.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    // Copy to MSLAB would not have happened if<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    // 1. MSLAB is turned OFF. See "hbase.hregion.memstore.mslab.enabled"<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // 2. When the size of the cell is bigger than the max size supported by MSLAB. See<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // "hbase.hregion.memstore.mslab.max.allocation". This defaults to 256 KB<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    // 3. When cells are from Append/Increment operation.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    if (!mslabUsed) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      toAdd = deepCopyIfNeeded(toAdd);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return internalAdd(toAdd, mslabUsed);<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>  private static Cell deepCopyIfNeeded(Cell cell) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // When Cell is backed by a shared memory chunk (this can be a chunk of memory where we read the<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // req into) the Cell instance will be of type ShareableMemory. Later we will add feature to<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // read the RPC request into pooled direct ByteBuffers.<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    if (cell instanceof ShareableMemory) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      return ((ShareableMemory) cell).cloneToCell();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return cell;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  /**<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * Update or insert the specified Cells.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * &lt;p&gt;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * For each Cell, insert into MemStore.  This will atomically upsert the<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * value for that row/family/qualifier.  If a Cell did already exist,<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * it will then be removed.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * &lt;p&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Currently the memstoreTS is kept at 0 so as each insert happens, it will<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * be immediately visible.  May want to change this so it is atomic across<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * all Cells.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * &lt;p&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * This is called under row lock, so Get operations will still see updates<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * atomically.  Scans will only see each Cell update as atomic.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   *<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @param cells the cells to be updated<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * @param readpoint readpoint below which we can safely remove duplicate KVs<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @return change in memstore size<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    long size = 0;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (Cell cell : cells) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      size += upsert(cell, readpoint);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return size;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @return Oldest timestamp of all the Cells in the MemStore<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  @Override<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public long timeOfOldestEdit() {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return timeOfOldestEdit;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  protected AbstractMemStore(final Configuration conf, final CellComparator c) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    this.conf = conf;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.comparator = c;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    resetActive();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this.snapshot = SegmentFactory.instance().createImmutableSegment(c, 0);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.snapshotId = NO_SNAPSHOT_ID;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected void resetActive() {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    // Reset heap to not include any keys<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    this.active = SegmentFactory.instance().createMutableSegment(conf, comparator, DEEP_OVERHEAD);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.timeOfOldestEdit = Long.MAX_VALUE;<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>  /*<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  * Calculate how the MemStore size has changed.  Includes overhead of the<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  * backing Map.<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  * @param cell<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  * @param notPresent True if the cell was NOT present in the set.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  * @return change in size<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  */<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  static long heapSizeChange(final Cell cell, final boolean notPresent) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return notPresent ? ClassSize.align(ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        + CellUtil.estimatedHeapSizeOf(cell)) : 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * Updates the wal with the lowest sequence id (oldest entry) that is still in memory<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @param onlyIfMoreRecent a flag that marks whether to update the sequence id no matter what or<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   *                      only if it is greater than the previous sequence id<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public abstract void updateLowestUnflushedSequenceIdInWAL(boolean onlyIfMoreRecent);<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>   * Write an update<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param cell the cell to be added<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return approximate size of the passed cell &amp; newly added cell which maybe different than the<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   *         passed-in cell<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public long add(Cell cell) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    Cell toAdd = maybeCloneWithAllocator(cell);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    boolean mslabUsed = (toAdd != cell);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    // This cell data is backed by the same byte[] where we read request in RPC(See HBASE-15180). By<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    // default MSLAB is ON and we might have copied cell to MSLAB area. If not we must do below deep<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // copy. Or else we will keep referring to the bigger chunk of memory and prevent it from<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    // getting GCed.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    // Copy to MSLAB would not have happened if<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    // 1. MSLAB is turned OFF. See "hbase.hregion.memstore.mslab.enabled"<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    // 2. When the size of the cell is bigger than the max size supported by MSLAB. See<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // "hbase.hregion.memstore.mslab.max.allocation". This defaults to 256 KB<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 3. When cells are from Append/Increment operation.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    if (!mslabUsed) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      toAdd = deepCopyIfNeeded(toAdd);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return internalAdd(toAdd, mslabUsed);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private static Cell deepCopyIfNeeded(Cell cell) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // When Cell is backed by a shared memory chunk (this can be a chunk of memory where we read the<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // req into) the Cell instance will be of type ShareableMemory. Later we will add feature to<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // read the RPC request into pooled direct ByteBuffers.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    if (cell instanceof ShareableMemory) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      return ((ShareableMemory) cell).cloneToCell();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return cell;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  /**<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * Update or insert the specified Cells.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * &lt;p&gt;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * For each Cell, insert into MemStore.  This will atomically upsert the<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * value for that row/family/qualifier.  If a Cell did already exist,<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * it will then be removed.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Currently the memstoreTS is kept at 0 so as each insert happens, it will<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * be immediately visible.  May want to change this so it is atomic across<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * all Cells.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * &lt;p&gt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * This is called under row lock, so Get operations will still see updates<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * atomically.  Scans will only see each Cell update as atomic.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   *<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param cells the cells to be updated<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param readpoint readpoint below which we can safely remove duplicate KVs<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return change in memstore size<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    long size = 0;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    for (Cell cell : cells) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      size += upsert(cell, readpoint);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return size;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @return Oldest timestamp of all the Cells in the MemStore<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @Override<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public long timeOfOldestEdit() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    return timeOfOldestEdit;<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>  /**<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * Write a delete<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param deleteCell the cell to be deleted<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @return approximate size of the passed key and value.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Override<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public long delete(Cell deleteCell) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // Delete operation just adds the delete marker cell coming here.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    return add(deleteCell);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * The passed snapshot was successfully persisted; it can be let go.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param id Id of the snapshot to clean out.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @see MemStore#snapshot()<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public void clearSnapshot(long id) throws UnexpectedStateException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (this.snapshotId == -1) return;  // already cleared<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (this.snapshotId != id) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      throw new UnexpectedStateException("Current snapshot id is " + this.snapshotId + ",passed "<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          + id);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // OK. Passed in snapshot is same as current snapshot. If not-empty,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // create a new snapshot and let the old one go.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    Segment oldSnapshot = this.snapshot;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (!this.snapshot.isEmpty()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      this.snapshot = SegmentFactory.instance().createImmutableSegment(<a name="line.202"></a>
-<span class="sourceLineNo">203</span>          getComparator(), 0);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    this.snapshotId = NO_SNAPSHOT_ID;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    oldSnapshot.close();<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>   * Get the entire heap usage for this MemStore not including keys in the<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * snapshot.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  public long heapSize() {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return getActive().getSize();<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>  @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  public long getSnapshotSize() {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    return getSnapshot().getSize();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public String toString() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    StringBuffer buf = new StringBuffer();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    int i = 1;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      for (Segment segment : getSegments()) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        buf.append("Segment (" + i + ") " + segment.toString() + "; ");<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        i++;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    } catch (IOException e){<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      return e.toString();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return buf.toString();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected Configuration getConfiguration() {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return conf;<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>  protected void dump(Log log) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    active.dump(log);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    snapshot.dump(log);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  /**<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * Write a delete<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param deleteCell the cell to be deleted<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * @return approximate size of the passed key and value.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   */<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  @Override<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  public long delete(Cell deleteCell) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // Delete operation just adds the delete marker cell coming here.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    return add(deleteCell);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * The passed snapshot was successfully persisted; it can be let go.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @param id Id of the snapshot to clean out.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @see MemStore#snapshot()<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public void clearSnapshot(long id) throws UnexpectedStateException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (this.snapshotId == -1) return;  // already cleared<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (this.snapshotId != id) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      throw new UnexpectedStateException("Current snapshot id is " + this.snapshotId + ",passed "<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          + id);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // OK. Passed in snapshot is same as current snapshot. If not-empty,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // create a new snapshot and let the old one go.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Segment oldSnapshot = this.snapshot;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (!this.snapshot.isEmpty()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.snapshot = SegmentFactory.instance().createImmutableSegment(<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          getComparator(), 0);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.snapshotId = NO_SNAPSHOT_ID;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    oldSnapshot.close();<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>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * Get the entire heap usage for this MemStore not including keys in the<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * snapshot.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  @Override<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public long heapSize() {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return getActive().getSize();<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>  @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public long getSnapshotSize() {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return getSnapshot().getSize();<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>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public String toString() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    StringBuffer buf = new StringBuffer();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    int i = 1;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    try {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      for (Segment segment : getSegments()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        buf.append("Segment (" + i + ") " + segment.toString() + "; ");<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        i++;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    } catch (IOException e){<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return e.toString();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return buf.toString();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  protected Configuration getConfiguration() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    return conf;<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>  protected void dump(Log log) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    active.dump(log);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    snapshot.dump(log);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
 <span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Inserts the specified Cell into MemStore and deletes any existing<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * versions of the same row/family/qualifier as the specified Cell.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * &lt;p&gt;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * First, the specified Cell is inserted into the Memstore.<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * &lt;p&gt;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * If there are any existing Cell in this MemStore with the same row,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * family, and qualifier, they are removed.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * &lt;p&gt;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Callers must hold the read lock.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   *<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * @param cell the cell to be updated<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param readpoint readpoint below which we can safely remove duplicate KVs<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return change in size of MemStore<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private long upsert(Cell cell, long readpoint) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    // Add the Cell to the MemStore<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Use the internalAdd method here since we (a) already have a lock<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // and (b) cannot safely use the MSLAB here without potentially<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // hitting OOME - see TestMemStore.testUpsertMSLAB for a<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    // test that triggers the pathological case if we don't avoid MSLAB<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // here.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    // This cell data is backed by the same byte[] where we read request in RPC(See HBASE-15180). We<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    // must do below deep copy. Or else we will keep referring to the bigger chunk of memory and<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    // prevent it from getting GCed.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    cell = deepCopyIfNeeded(cell);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    long addedSize = internalAdd(cell, false);<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // Get the Cells for the row/family/qualifier regardless of timestamp.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // For this case we want to clean up any other puts<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Cell firstCell = KeyValueUtil.createFirstOnRow(<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    SortedSet&lt;Cell&gt; ss = active.tailSet(firstCell);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    Iterator&lt;Cell&gt; it = ss.iterator();<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    // versions visible to oldest scanner<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    int versionsVisible = 0;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    while (it.hasNext()) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      Cell cur = it.next();<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if (cell == cur) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        // ignore the one just put in<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        continue;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // check that this is the row and column we are interested in, otherwise bail<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (CellUtil.matchingRow(cell, cur) &amp;&amp; CellUtil.matchingQualifier(cell, cur)) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        // only remove Puts that concurrent scanners cannot possibly see<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        if (cur.getTypeByte() == KeyValue.Type.Put.getCode() &amp;&amp;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>            cur.getSequenceId() &lt;= readpoint) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          if (versionsVisible &gt;= 1) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>            // if we get here we have seen at least one version visible to the oldest scanner,<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            // which means we can prove that no scanner will see this version<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>            // false means there was a change, so give us the size.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>            long delta = heapSizeChange(cur, true);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>            addedSize -= delta;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            active.incSize(-delta);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            it.remove();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            setOldestEditTimeToNow();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          } else {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            versionsVisible++;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      } else {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        // past the row or column, done<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        break;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    return addedSize;<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>  /*<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param a<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @param b<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @return Return lowest of a or b or null if both a and b are null<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  protected Cell getLowest(final Cell a, final Cell b) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (a == null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return b;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (b == null) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return a;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return comparator.compareRows(a, b) &lt;= 0? a: b;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /*<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @param key Find row that follows this one.  If null, return first.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * @param set Set to look in for a row beyond &lt;code&gt;row&lt;/code&gt;.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @return Next row or null if none found.  If one found, will be a new<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * KeyValue -- can be destroyed by subsequent calls to this method.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  protected Cell getNextRow(final Cell key,<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      final NavigableSet&lt;Cell&gt; set) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    Cell result = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SortedSet&lt;Cell&gt; tail = key == null? set: set.tailSet(key);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    // Iterate until we fall into the next row; i.e. move off current row<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    for (Cell cell: tail) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      if (comparator.compareRows(cell, key) &lt;= 0) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        continue;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Note: Not suppressing deletes or expired cells.  Needs to be handled<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      // by higher up functions.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      result = cell;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      break;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return result;<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>   * Given the specs of a column, update it, first by inserting a new record,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * then removing the old one.  Since there is only 1 KeyValue involved, the memstoreTS<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * will be set to 0, thus ensuring that they instantly appear to anyone. The underlying<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * store will ensure that the insert/delete each are atomic. A scanner/reader will either<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * get the new value, or the old value and all readers will eventually only see the new<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * value after the old was removed.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  @VisibleForTesting<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public long updateColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      long newValue, long now) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Cell firstCell = KeyValueUtil.createFirstOnRow(row, family, qualifier);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    // Is there a Cell in 'snapshot' with the same TS? If so, upgrade the timestamp a bit.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    Cell snc = snapshot.getFirstAfter(firstCell);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if(snc != null) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      // is there a matching Cell in the snapshot?<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      if (CellUtil.matchingRow(snc, firstCell) &amp;&amp; CellUtil.matchingQualifier(snc, firstCell)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        if (snc.getTimestamp() == now) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          now += 1;<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>    }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // logic here: the new ts MUST be at least 'now'. But it could be larger if necessary.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    // But the timestamp should also be max(now, mostRecentTsInMemstore)<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // so we cant add the new Cell w/o knowing what's there already, but we also<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    // want to take this chance to delete some cells. So two loops (sad)<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>    SortedSet&lt;Cell&gt; ss = getActive().tailSet(firstCell);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    for (Cell cell : ss) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      // if this isnt the row we are interested in, then bail:<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (!CellUtil.matchingColumn(cell, family, qualifier)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          || !CellUtil.matchingRow(cell, firstCell)) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        break; // rows dont match, bail.<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>      // if the qualifier matches and it's a put, just RM it out of the active.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (cell.getTypeByte() == KeyValue.Type.Put.getCode() &amp;&amp;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          cell.getTimestamp() &gt; now &amp;&amp; CellUtil.matchingQualifier(firstCell, cell)) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        now = cell.getTimestamp();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    // create or update (upsert) a new Cell with<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    // 'now' and a 0 memstoreTS == immediately visible<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    List&lt;Cell&gt; cells = new ArrayList&lt;Cell&gt;(1);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    cells.add(new KeyValue(row, family, qualifier, now, Bytes.toBytes(newValue)));<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return upsert(cells, 1L);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private Cell maybeCloneWithAllocator(Cell cell) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    return active.maybeCloneWithAllocator(cell);<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>   * Internal version of add() that doesn't clone Cells with the<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * allocator, and doesn't take the lock.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   *<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * Callers should ensure they already have the read lock taken<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * @param toAdd the cell to add<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * @param mslabUsed whether using MSLAB<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @return the heap size change in bytes<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private long internalAdd(final Cell toAdd, final boolean mslabUsed) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    long s = active.add(toAdd, mslabUsed);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    setOldestEditTimeToNow();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    checkActiveSize();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return s;<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>  private void setOldestEditTimeToNow() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (timeOfOldestEdit == Long.MAX_VALUE) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      timeOfOldestEdit = EnvironmentEdgeManager.currentTime();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>  protected long keySize() {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return heapSize() - DEEP_OVERHEAD;<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>  protected CellComparator getComparator() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    return comparator;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  protected MutableSegment getActive() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    return active;<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>  protected ImmutableSegment getSnapshot() {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return snapshot;<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>  protected AbstractMemStore setSnapshot(ImmutableSegment snapshot) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    this.snapshot = snapshot;<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return this;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  protected void setSnapshotSize(long snapshotSize) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    getSnapshot().setSize(snapshotSize);<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>  /**<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * Check whether anything need to be done based on the current active set size<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   */<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  protected abstract void checkActiveSize();<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>   * Returns an ordered list of segments from most recent to oldest in memstore<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * @return an ordered list of segments from most recent to oldest in memstore<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  protected abstract List&lt;Segment&gt; getSegments() throws IOException;<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>}<a name="line.471"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * Inserts the specified Cell into MemStore and deletes any existing<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * versions of the same row/family/qualifier as the specified Cell.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * &lt;p&gt;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * First, the specified Cell is inserted into the Memstore.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * &lt;p&gt;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * If there are any existing Cell in this MemStore with the same row,<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * family, and qualifier, they are removed.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * &lt;p&gt;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Callers must hold the read lock.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   *<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param cell the cell to be updated<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param readpoint readpoint below which we can safely remove duplicate KVs<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @return change in size of MemStore<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private long upsert(Cell cell, long readpoint) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    // Add the Cell to the MemStore<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Use the internalAdd method here since we (a) already have a lock<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // and (b) cannot safely use the MSLAB here without potentially<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // hitting OOME - see TestMemStore.testUpsertMSLAB for a<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    // test that triggers the pathological case if we don't avoid MSLAB<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    // here.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // This cell data is backed by the same byte[] where we read request in RPC(See HBASE-15180). We<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // must do below deep copy. Or else we will keep referring to the bigger chunk of memory and<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    // prevent it from getting GCed.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    cell = deepCopyIfNeeded(cell);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    long addedSize = internalAdd(cell, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    // Get the Cells for the row/family/qualifier regardless of timestamp.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    // For this case we want to clean up any other puts<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Cell firstCell = KeyValueUtil.createFirstOnRow(<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    SortedSet&lt;Cell&gt; ss = active.tailSet(firstCell);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    Iterator&lt;Cell&gt; it = ss.iterator();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    // versions visible to oldest scanner<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int versionsVisible = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    while (it.hasNext()) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      Cell cur = it.next();<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if (cell == cur) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        // ignore the one just put in<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        continue;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // check that this is the row and column we are interested in, otherwise bail<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      if (CellUtil.matchingRow(cell, cur) &amp;&amp; CellUtil.matchingQualifier(cell, cur)) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        // only remove Puts that concurrent scanners cannot possibly see<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        if (cur.getTypeByte() == KeyValue.Type.Put.getCode() &amp;&amp;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>            cur.getSequenceId() &lt;= readpoint) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          if (versionsVisible &gt;= 1) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>            // if we get here we have seen at least one version visible to the oldest scanner,<a name="line.300"></a>
+<span class="sourceLineNo">301</span>            // which means we can prove that no scanner will see this version<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>            // false means there was a change, so give us the size.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>            long delta = heapSizeChange(cur, true);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>            addedSize -= delta;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            active.incSize(-delta);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>            it.remove();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>            setOldestEditTimeToNow();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          } else {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>            versionsVisible++;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      } else {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        // past the row or column, done<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        break;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    return addedSize;<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>  /*<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param a<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param b<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * @return Return lowest of a or b or null if both a and b are null<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  protected Cell getLowest(final Cell a, final Cell b) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    if (a == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      return b;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (b == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return a;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return comparator.compareRows(a, b) &lt;= 0? a: b;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  /*<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @param key Find row that follows this one.  If null, return first.<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * @param set Set to look in for a row beyond &lt;code&gt;row&lt;/code&gt;.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * @return Next row or null if none found.  If one found, will be a new<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * KeyValue -- can be destroyed by subsequent calls to this method.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  protected Cell getNextRow(final Cell key,<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      final NavigableSet&lt;Cell&gt; set) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    Cell result = null;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SortedSet&lt;Cell&gt; tail = key == null? set: set.tailSet(key);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // Iterate until we fall into the next row; i.e. move off current row<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (Cell cell: tail) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (comparator.compareRows(cell, key) &lt;= 0) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        continue;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      // Note: Not suppressing deletes or expired cells.  Needs to be handled<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // by higher up functions.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      result = cell;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      break;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return result;<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>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * Given the specs of a column, update it, first by inserting a new record,<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * then removing the old one.  Since there is only 1 KeyValue involved, the memstoreTS<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * will be set to 0, thus ensuring that they instantly appear to anyone. The underlying<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * store will ensure that the insert/delete each are atomic. A scanner/reader will either<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * get the new value, or the old value and all readers will eventually only see the new<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * value after the old was removed.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @VisibleForTesting<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  public long updateColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      long newValue, long now) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    Cell firstCell = KeyValueUtil.createFirstOnRow(row, family, qualifier);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    // Is there a Cell in 'snapshot' with the same TS? If so, upgrade the timestamp a bit.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    Cell snc = snapshot.getFirstAfter(firstCell);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if(snc != null) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      // is there a matching Cell in the snapshot?<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      if (CellUtil.matchingRow(snc, firstCell) &amp;&amp; CellUtil.matchingQualifier(snc, firstCell)) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        if (snc.getTimestamp() == now) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          now += 1;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    // logic here: the new ts MUST be at least 'now'. But it could be larger if necessary.<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    // But the timestamp should also be max(now, mostRecentTsInMemstore)<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // so we cant add the new Cell w/o knowing what's there already, but we also<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    // want to take this chance to delete some cells. So two loops (sad)<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>    SortedSet&lt;Cell&gt; ss = getActive().tailSet(firstCell);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    for (Cell cell : ss) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // if this isnt the row we are interested in, then bail:<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      if (!CellUtil.matchingColumn(cell, family, qualifier)<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          || !CellUtil.matchingRow(cell, firstCell)) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        break; // rows dont match, bail.<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>      // if the qualifier matches and it's a put, just RM it out of the active.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (cell.getTypeByte() == KeyValue.Type.Put.getCode() &amp;&amp;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          cell.getTimestamp() &gt; now &amp;&amp; CellUtil.matchingQualifier(firstCell, cell)) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        now = cell.getTimestamp();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>    // create or update (upsert) a new Cell with<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    // 'now' and a 0 memstoreTS == immediately visible<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    List&lt;Cell&gt; cells = new ArrayList&lt;Cell&gt;(1);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    cells.add(new KeyValue(row, family, qualifier, now, Bytes.toBytes(newValue)));<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return upsert(cells, 1L);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  private Cell maybeCloneWithAllocator(Cell cell) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    return active.maybeCloneWithAllocator(cell);<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>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Internal version of add() that doesn't clone Cells with the<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * allocator, and doesn't take the lock.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   *<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * Callers should ensure they already have the read lock taken<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param toAdd the cell to add<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * @param mslabUsed whether using MSLAB<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return the heap size change in bytes<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  private long internalAdd(final Cell toAdd, final boolean mslabUsed) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    long s = active.add(toAdd, mslabUsed);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    setOldestEditTimeToNow();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    checkActiveSize();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return s;<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>  private void setOldestEditTimeToNow() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (timeOfOldestEdit == Long.MAX_VALUE) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      timeOfOldestEdit = EnvironmentEdgeManager.currentTime();<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><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  protected long keySize() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    return heapSize() - DEEP_OVERHEAD;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  protected CellComparator getComparator() {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    return comparator;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>  protected MutableSegment getActive() {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    return active;<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  }<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  protected ImmutableSegment getSnapshot() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    return snapshot;<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>  protected AbstractMemStore setSnapshot(ImmutableSegment snapshot) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    this.snapshot = snapshot;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    return this;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  protected void setSnapshotSize(long snapshotSize) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    getSnapshot().setSize(snapshotSize);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Check whether anything need to be done based on the current active set size<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  protected abstract void checkActiveSize();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Returns an ordered list of segments from most recent to oldest in memstore<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @return an ordered list of segments from most recent to oldest in memstore<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   */<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  protected abstract List&lt;Segment&gt; getSegments() throws IOException;<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>}<a name="line.472"></a>
 
 
 


[13/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
index 32277da..2b5c301 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -43,2833 +43,2836 @@
 <span class="sourceLineNo">035</span>import java.util.Collection;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.Collections;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import java.util.Comparator;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Iterator;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.Map;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Map.Entry;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.Set;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CountDownLatch;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.TimeUnit;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.regex.Pattern;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>import javax.servlet.ServletException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import javax.servlet.http.HttpServlet;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import javax.servlet.http.HttpServletRequest;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import javax.servlet.http.HttpServletResponse;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.commons.logging.Log;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.commons.logging.LogFactory;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.conf.Configuration;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CoordinatedStateException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HConstants;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ProcedureInfo;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.RegionStateListener;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerLoad;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Result;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.coprocessor.BypassCoprocessorException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationMetaCleaner;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationZKLockCleanerChore;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.procedure.DeleteColumnFamilyProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.procedure.DispatchMergingRegionsProcedure;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.ProcedureEvent;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.procedure.ModifyColumnFamilyProcedure;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.replication.ReplicationQueuesZKImpl;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.replication.master.TableCFsUpdater;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.replication.regionserver.Replication;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.util.ZKDataMigrator;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.zookeeper.DrainingServerTracker;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.zookeeper.MasterMaintenanceModeTracker;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.zookeeper.RegionServerTracker;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.zookeeper.KeeperException;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.mortbay.jetty.Connector;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.mortbay.jetty.nio.SelectChannelConnector;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.mortbay.jetty.servlet.Context;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * run the cluster.  All others park themselves in their constructor until<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> *<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> *<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> *<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @see org.apache.zookeeper.Watcher<a name="line.191"></a>
-<span class="sourceLineNo">192</span> */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@SuppressWarnings("deprecation")<a name="line.194"></a>
-<span class="sourceLineNo">195</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  private static final Log LOG = LogFactory.getLog(HMaster.class.getName());<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static class InitializationMonitor extends HasThread {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * true, do nothing otherwise.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public static final boolean HALT_DEFAULT = false;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private final HMaster master;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private final long timeout;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private final boolean haltOnTimeout;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    InitializationMonitor(HMaster master) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      super("MasterInitializationMonitor");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      this.master = master;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      this.setDaemon(true);<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>    @Override<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    public void run() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          Thread.sleep(timeout);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          if (master.isInitialized()) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            if (haltOnTimeout) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  //instance into web context.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public static final String MASTER = "master";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  // Manager and zk listener for master election<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private final ActiveMasterManager activeMasterManager;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  // Region server tracker<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  RegionServerTracker regionServerTracker;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  // Draining region server tracker<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private DrainingServerTracker drainingServerTracker;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  // Tracker for load balancer state<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  // Tracker for split and merge state<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  // Tracker for region normalizer state<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  //Tracker for master maintenance mode setting<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private ClusterSchemaService clusterSchemaService;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  // Metrics for the HMaster<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  final MetricsMaster metricsMaster;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // file system manager for the master FS operations<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private MasterFileSystem fileSystemManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  private MasterWalManager walManager;<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // server manager to deal with region server info<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private volatile ServerManager serverManager;<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // manager of assignment nodes in zookeeper<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private AssignmentManager assignmentManager;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  // buffer for "fatal error" notices from region servers<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  // in the cluster. This is only used for assisting<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // operations/debugging.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // flag set after we become the active master (used for testing)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private volatile boolean isActiveMaster = false;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  // flag set after we complete initialization once active,<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  // it is not private since it's used in unit tests<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  // flag set after master services are started,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  // initialization may have not completed yet.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  volatile boolean serviceStarted = false;<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  // flag set after we complete assignMeta.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private final ProcedureEvent serverCrashProcessingEnabled =<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    new ProcedureEvent("server crash processing");<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  private LoadBalancer balancer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  private RegionNormalizer normalizer;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private BalancerChore balancerChore;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private RegionNormalizerChore normalizerChore;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private ClusterStatusChore clusterStatusChore;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private PeriodicDoMetrics periodicDoMetricsChore = null;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  CatalogJanitor catalogJanitorChore;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private ReplicationZKLockCleanerChore replicationZKLockCleanerChore;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  private ReplicationMetaCleaner replicationMetaCleaner;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private LogCleaner logCleaner;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private HFileCleaner hfileCleaner;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private MobCompactionChore mobCompactChore;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // used to synchronize the mobCompactionStates<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  // save the information of mob compactions in tables.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  MasterCoprocessorHost cpHost;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private final boolean preLoadTableDescriptors;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Time stamps for when a hmaster became active<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private long masterActiveTime;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final boolean masterCheckCompression;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  //should we check encryption settings at master side, default true<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private final boolean masterCheckEncryption;<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // monitor for snapshot of hbase tables<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  SnapshotManager snapshotManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // monitor for distributed procedures<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private MasterProcedureManagerHost mpmHost;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private volatile MasterQuotaManager quotaManager;<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private WALProcedureStore procedureStore;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // handle table states<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private TableStateManager tableStateManager;<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private long splitPlanCount;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  private long mergePlanCount;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  /** flag used in test cases in order to simulate RS failures during master initialization */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private volatile boolean initializationBeforeMetaAssignment = false;<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private org.mortbay.jetty.Server masterJettyServer;<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static class RedirectServlet extends HttpServlet {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    private static final long serialVersionUID = 2894774810058302472L;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    private static int regionServerInfoPort;<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public void doGet(HttpServletRequest request,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      String redirectUrl = request.getScheme() + "://"<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        + request.getServerName() + ":" + regionServerInfoPort<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        + request.getRequestURI();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      response.sendRedirect(redirectUrl);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private static class PeriodicDoMetrics extends ScheduledChore {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private final HMaster server;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    public PeriodicDoMetrics(int doMetricsInterval, final HMaster server) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      super(server.getServerName() + "-DoMetricsChore", server, doMetricsInterval);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      this.server = server;<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>    @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    protected void chore() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      server.doMetrics();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Initializes the HMaster. The steps are as follows:<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * &lt;p&gt;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;ol&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * &lt;li&gt;Initialize the local HRegionServer<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;li&gt;Start the ActiveMasterManager.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;/ol&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * &lt;p&gt;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Remaining steps of initialization occur in<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * the master becomes the active one.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public HMaster(final Configuration conf, CoordinatedStateManager csm)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      throws IOException, KeeperException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    super(conf, csm);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      conf.getLong("hbase.master.buffer.for.rs.fatals", 1*1024*1024));<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    LOG.info("hbase.rootdir=" + FSUtils.getRootDir(this.conf) +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Disable usage of meta replicas in the master<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    Replication.decorateMasterConfiguration(this.conf);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // Hack! Maps DFSClient =&gt; Master for logs.  HDFS made this<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    // config param for task trackers, but we can piggyback off of it.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // should we check encryption settings at master side, default true<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // preload table descriptor at startup<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // Do we publish the status?<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Class&lt;? extends ClusterStatusPublisher.Publisher&gt; publisherClass =<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            ClusterStatusPublisher.Publisher.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (shouldPublish) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (publisherClass == null) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.448"></a>
-<span class="sourceLineNo">449</span>            " is not set - not publishing status");<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      } else {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        getChoreService().scheduleChore(clusterStatusPublisherChore);<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><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      setInitLatch(new CountDownLatch(1));<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      int infoPort = putUpJettyServer();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      startActiveMasterManager(infoPort);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      activeMasterManager = 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><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // return the actual infoPort, -1 means disable info server.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private int putUpJettyServer() throws IOException {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return -1;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    // -1 is for disabling info server, so no redirecting<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    if (infoPort &lt; 0 || infoServer == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      return -1;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String msg =<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          "Failed to start redirecting jetty server. Address " + addr<a name="line.481"></a>
-<span class="sourceLineNo">482</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.482"></a>
-<span class="sourceLineNo">483</span>              + "hbase.master.info.bindAddress";<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      LOG.error(msg);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new IOException(msg);<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>    RedirectServlet.regionServerInfoPort = infoServer.getPort();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if(RedirectServlet.regionServerInfoPort == infoPort) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      return infoPort;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    masterJettyServer = new org.mortbay.jetty.Server();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    Connector connector = new SelectChannelConnector();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    connector.setHost(addr);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    connector.setPort(infoPort);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    masterJettyServer.addConnector(connector);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    masterJettyServer.setStopAtShutdown(true);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Context context = new Context(masterJettyServer, "/", Context.NO_SESSIONS);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    context.addServlet(RedirectServlet.class, "/*");<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    try {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      masterJettyServer.start();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    } catch (Exception e) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      throw new IOException("Failed to start redirecting jetty server", e);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return connector.getLocalPort();<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>  @Override<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    return super.getFsTableDescriptors();<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>  /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * For compatibility, if failed with regionserver credentials, try the master one<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   */<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    try {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      super.login(user, host);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    } catch (IOException ie) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      user.login("hbase.master.keytab.file",<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        "hbase.master.kerberos.principal", host);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<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>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * If configured to put regions on active master,<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * wait till a backup master becomes active.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * Otherwise, loop till the server is stopped or aborted.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   */<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  @Override<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  protected void waitForMasterActive(){<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    boolean tablesOnMaster = BaseLoadBalancer.tablesOnMaster(conf);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    while (!(tablesOnMaster &amp;&amp; isActiveMaster)<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        &amp;&amp; !isStopped() &amp;&amp; !isAborted()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      sleeper.sleep();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public MasterRpcServices getMasterRpcServices() {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return (MasterRpcServices)rpcServices;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  protected String getProcessName() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    return MASTER;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  protected boolean canCreateBaseZNode() {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return true;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  @Override<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  protected boolean canUpdateTableDescriptor() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return true;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return new MasterRpcServices(this);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  protected void configureInfoServer() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    infoServer.setAttribute(MASTER, this);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      super.configureInfoServer();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return MasterDumpServlet.class;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * Emit the HMaster metrics, such as region in transition metrics.<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * Surrounding in a try block just to be sure metrics doesn't abort HMaster.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void doMetrics() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      if (assignmentManager != null) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        assignmentManager.updateRegionsInTransitionMetrics();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    } catch (Throwable e) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      LOG.error("Couldn't update metrics: " + e.getMessage());<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>  MetricsMaster getMasterMetrics() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return metricsMaster;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Initialize all ZK based system trackers.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  void initializeZKBasedSystemTrackers() throws IOException,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      InterruptedException, KeeperException, CoordinatedStateException {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    this.normalizer = RegionNormalizerFactory.getRegionNormalizer(conf);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.normalizer.setMasterServices(this);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    this.normalizer.setMasterRpcServices((MasterRpcServices)rpcServices);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    this.loadBalancerTracker.start();<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    this.regionNormalizerTracker = new RegionNormalizerTracker(zooKeeper, this);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    this.regionNormalizerTracker.start();<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    this.splitOrMergeTracker.start();<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.assignmentManager = new AssignmentManager(this, serverManager,<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      this.balancer, this.service, this.metricsMaster,<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      this.tableLockManager, tableStateManager);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    this.regionServerTracker.start();<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.drainingServerTracker.start();<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    this.maintenanceModeTracker = new MasterMaintenanceModeTracker(zooKeeper);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    this.maintenanceModeTracker.start();<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // going ahead with their startup.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    LOG.info("Server active/primary master=" + this.serverName +<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        ", sessionid=0x" +<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    this.snapshotManager = new SnapshotManager();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    this.mpmHost.register(this.snapshotManager);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    this.mpmHost.loadProcedures(conf);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    this.mpmHost.initialize(this, this.metricsMaster);<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><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;ol&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * &lt;li&gt;Initialize master components - file system manager, server manager,<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   *     assignment manager, region server tracker, etc&lt;/li&gt;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior,<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *     executor services, etc&lt;/li&gt;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;li&gt;Set cluster as UP in ZooKeeper&lt;/li&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;li&gt;Wait for RegionServers to check-in&lt;/li&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * &lt;li&gt;Split logs and perform data recovery, if necessary&lt;/li&gt;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * &lt;li&gt;Ensure assignment of meta/namespace regions&lt;li&gt;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * &lt;li&gt;Handle either fresh cluster start or master failover&lt;/li&gt;<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * &lt;/ol&gt;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  private void finishActiveMasterInitialization(MonitoredTask status)<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      throws IOException, InterruptedException, KeeperException, CoordinatedStateException {<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    isActiveMaster = true;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this));<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    zombieDetector.start();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    /*<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * We are active master now... go initialize components we need to run.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * Note, there may be dross in zk from previous runs; it'll get addressed<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     * below after we determine if cluster startup or failover.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     */<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    status.setStatus("Initializing Master file system");<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    this.fileSystemManager = new MasterFileSystem(this);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    this.walManager = new MasterWalManager(this);<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>    // enable table descriptors cache<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    this.tableDescriptors.setCacheOn();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    // set the META's descriptor to the correct replication<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    this.tableDescriptors.get(TableName.META_TABLE_NAME).setRegionReplication(<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    // warm-up HTDs cache on master initialization<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (preLoadTableDescriptors) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      status.setStatus("Pre-loading table descriptors");<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      this.tableDescriptors.getAll();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>    // publish cluster ID<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    status.setStatus("Publishing Cluster ID in ZooKeeper");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    this.initLatch.countDown();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    this.serverManager = createServerManager(this);<a name="line.703"></a>
-<span class="sourceLineNo">704</span><a name="line.704"></a>
-<span class="sourceLineNo">705</span>    // Invalidate all write locks held previously<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    this.tableLockManager.reapWriteLocks();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.tableStateManager = new TableStateManager(this);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    status.setStatus("Initializing ZK system trackers");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    initializeZKBasedSystemTrackers();<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    // This is for backwards compatibility<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    // See HBASE-11393<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    TableCFsUpdater tableCFsUpdater = new TableCFsUpdater(zooKeeper,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            conf, this.clusterConnection);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    tableCFsUpdater.update();<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    // initialize master side coprocessors before we start handling requests<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    status.setStatus("Initializing master coprocessors");<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    // start up all service threads.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    status.setStatus("Initializing master service threads");<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    startServiceThreads();<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // Wake up this server to check in<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    sleeper.skipSleepCycle();<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Wait for region servers to report in<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    status.setStatus("Wait for region servers to report in");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    waitForRegionServers(status);<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // get a list for previously failed RS which need log splitting work<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // we recover hbase:meta region servers inside master initialization and<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // handle other failed servers in SSH in order to start up master node ASAP<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap(this, status);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    metaBootstrap.splitMetaLogsBeforeAssignment();<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.initializationBeforeMetaAssignment = true;<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>    // Wait for regionserver to finish initialization.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      waitForServerOnline();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>    //initialize load balancer<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    this.balancer.setMasterServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    this.balancer.initialize();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>    // Check if master is shutting down because of some issue<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    // in initializing the regionserver or the balancer.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    if (isStopped()) return;<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    // Make sure meta assigned before proceeding.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    status.setStatus("Assigning Meta Region");<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    metaBootstrap.assignMeta();<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    // check if master is shutting down because above assignMeta could return even hbase:meta isn't<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    // assigned when master is shutting down<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (isStopped()) return;<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>    // migrating existent table state from zk, so splitters<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    // and recovery process treat states properly.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        .queryForTableStates(getZooKeeper()).entrySet()) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      LOG.info("Converting state from zk to new states:" + entry);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      tableStateManager.setTableState(entry.getKey(), entry.getValue());<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    ZKUtil.deleteChildrenRecursively(getZooKeeper(), getZooKeeper().tableZNode);<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>    status.setStatus("Submitting log splitting work for previously failed region servers");<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    metaBootstrap.processDeadServers();<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Fix up assignment manager status<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    status.setStatus("Starting assignment manager");<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    this.assignmentManager.joinCluster();<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>    // set cluster status again after user regions are assigned<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    this.balancerChore = new BalancerChore(this);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    getChoreService().scheduleChore(balancerChore);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    this.catalogJanitorChore = new CatalogJanitor(this, this);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>    // Do Metrics periodically<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    periodicDoMetricsChore = new PeriodicDoMetrics(msgInterval, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    getChoreService().scheduleChore(periodicDoMetricsChore);<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span>    status.setStatus("Starting cluster schema service");<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    initClusterSchemaService();<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>    if (this.cpHost != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        this.cpHost.preMasterInitialization();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      } catch (IOException e) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      }<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>    status.markComplete("Initialization successful");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    LOG.info("Master has completed initialization");<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    configurationManager.registerObserver(this.balancer);<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // Set master as 'initialized'.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    setInitialized(true);<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>    status.setStatus("Assign meta replicas");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    metaBootstrap.assignMetaReplicas();<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>    status.setStatus("Starting quota manager");<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    initQuotaManager();<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    // master initialization. See HBASE-5916.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    status.setStatus("Checking ZNode ACLs");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    initMobCleaner();<a name="line.832"></a>
-<span class="sourceLineNo">833</span><a name="line.833"></a>
-<span class="sourceLineNo">834</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    if (this.cpHost != null) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      // don't let cp initialization errors kill the master<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        this.cpHost.postStartMaster();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      } catch (IOException ioe) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>    zombieDetector.interrupt();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
-<span class="sourceLineNo">846</span><a name="line.846"></a>
-<span class="sourceLineNo">847</span>  private void initMobCleaner() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    } else {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      LOG<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>  /**<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   */<a name="line.865"></a>
-<span class="sourceLineNo">866</span>  MasterMetaBootstrap createMetaBootstrap(final HMaster master, final MonitoredTask status) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    return new MasterMetaBootstrap(master, status);<a name="line.869"></a>
-<span class="sourceLineNo">870</span>  }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>  /**<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * Create a {@link ServerManager} instance.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   */<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    // w/ a mocked up ServerManager.<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    setupClusterConnection();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    return new ServerManager(master);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
-<span class="sourceLineNo">881</span><a name="line.881"></a>
-<span class="sourceLineNo">882</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      throws IOException, InterruptedException {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    this.serverManager.waitForRegionServers(status);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Check zk for region servers that are up but didn't register<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServerName sn: this.regionServerTracker.getOnlineServers()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      // The isServerOnline check is opportunistic, correctness is handled inside<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      if (!this.serverManager.isServerOnline(sn)<a name="line.888"></a>
-<span class="sourceLineNo">889</span>          &amp;&amp; serverManager.checkAndRecordNewServer(sn, ServerLoad.EMPTY_SERVERLOAD)) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        LOG.info("Registered server found up in zk but who has not yet reported in: " + sn);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>  }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>  void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.clusterSchemaService.startAndWait();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (!this.clusterSchemaService.isRunning()) throw new HBaseIOException("Failed start");<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>  void initQuotaManager() throws IOException {<a name="line.901"></a>
-<span cl

<TRUNCATED>

[45/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
index b3f6e43..7a4835b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.468">BufferedDataBlockEncoder.OffheapDecodedCell</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.474">BufferedDataBlockEncoder.OffheapDecodedCell</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../../org/apache/hadoop/hbase/SettableSequenceId.html" title="interface in org.apache.hadoop.hbase">SettableSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/Streamable.html" title="interface in org.apache.hadoop.hbase">Streamable</a></pre>
 </li>
@@ -415,7 +415,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.470">FIXED_OVERHEAD</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.476">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="keyBuffer">
@@ -424,7 +424,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>keyBuffer</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.473">keyBuffer</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.479">keyBuffer</a></pre>
 </li>
 </ul>
 <a name="rowLength">
@@ -433,7 +433,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>rowLength</h4>
-<pre>private&nbsp;short <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.474">rowLength</a></pre>
+<pre>private&nbsp;short <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.480">rowLength</a></pre>
 </li>
 </ul>
 <a name="familyOffset">
@@ -442,7 +442,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>familyOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.475">familyOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.481">familyOffset</a></pre>
 </li>
 </ul>
 <a name="familyLength">
@@ -451,7 +451,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>familyLength</h4>
-<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.476">familyLength</a></pre>
+<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.482">familyLength</a></pre>
 </li>
 </ul>
 <a name="qualifierOffset">
@@ -460,7 +460,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>qualifierOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.477">qualifierOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.483">qualifierOffset</a></pre>
 </li>
 </ul>
 <a name="qualifierLength">
@@ -469,7 +469,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>qualifierLength</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.478">qualifierLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.484">qualifierLength</a></pre>
 </li>
 </ul>
 <a name="timestamp">
@@ -478,7 +478,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.479">timestamp</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.485">timestamp</a></pre>
 </li>
 </ul>
 <a name="typeByte">
@@ -487,7 +487,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>typeByte</h4>
-<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.480">typeByte</a></pre>
+<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.486">typeByte</a></pre>
 </li>
 </ul>
 <a name="valueBuffer">
@@ -496,7 +496,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>valueBuffer</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.481">valueBuffer</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.487">valueBuffer</a></pre>
 </li>
 </ul>
 <a name="valueOffset">
@@ -505,7 +505,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.482">valueOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.488">valueOffset</a></pre>
 </li>
 </ul>
 <a name="valueLength">
@@ -514,7 +514,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>valueLength</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.483">valueLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.489">valueLength</a></pre>
 </li>
 </ul>
 <a name="tagsBuffer">
@@ -523,7 +523,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>tagsBuffer</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.484">tagsBuffer</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.490">tagsBuffer</a></pre>
 </li>
 </ul>
 <a name="tagsOffset">
@@ -532,7 +532,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>tagsOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.485">tagsOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.491">tagsOffset</a></pre>
 </li>
 </ul>
 <a name="tagsLength">
@@ -541,7 +541,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>tagsLength</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.486">tagsLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.492">tagsLength</a></pre>
 </li>
 </ul>
 <a name="seqId">
@@ -550,7 +550,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>seqId</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.487">seqId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.493">seqId</a></pre>
 </li>
 </ul>
 </li>
@@ -567,7 +567,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferedDataBlockEncoder.OffheapDecodedCell</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.489">BufferedDataBlockEncoder.OffheapDecodedCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;keyBuffer,
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.495">BufferedDataBlockEncoder.OffheapDecodedCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;keyBuffer,
                                            short&nbsp;rowLength,
                                            int&nbsp;familyOffset,
                                            byte&nbsp;familyLength,
@@ -598,7 +598,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.514">getRowArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.520">getRowArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getRowArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous raw bytes that may start at any index in the containing array. Max length is
  Short.MAX_VALUE which is 32,767 bytes.</div>
@@ -614,7 +614,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.519">getRowOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.525">getRowOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getRowOffset()">getRowOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -627,7 +627,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLength</h4>
-<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.524">getRowLength</a>()</pre>
+<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.530">getRowLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getRowLength()">getRowLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -640,7 +640,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.529">getFamilyArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.535">getFamilyArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getFamilyArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous bytes composed of legal HDFS filename characters which may start at any index in the
  containing array. Max length is Byte.MAX_VALUE, which is 127 bytes.</div>
@@ -656,7 +656,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.534">getFamilyOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.540">getFamilyOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getFamilyOffset()">getFamilyOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -669,7 +669,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyLength</h4>
-<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.539">getFamilyLength</a>()</pre>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.545">getFamilyLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getFamilyLength()">getFamilyLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -682,7 +682,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.544">getQualifierArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.550">getQualifierArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getQualifierArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous raw bytes that may start at any index in the containing array.</div>
 <dl>
@@ -697,7 +697,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.549">getQualifierOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.555">getQualifierOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getQualifierOffset()">getQualifierOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -710,7 +710,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.554">getQualifierLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.560">getQualifierLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getQualifierLength()">getQualifierLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -723,7 +723,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.559">getTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.565">getTimestamp</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTimestamp()">getTimestamp</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -737,7 +737,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTypeByte</h4>
-<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.564">getTypeByte</a>()</pre>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.570">getTypeByte</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTypeByte()">getTypeByte</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -750,7 +750,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.569">getSequenceId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.575">getSequenceId</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getSequenceId()">Cell</a></code></strong></div>
 <div class="block">A region-specific unique monotonically increasing sequence ID given to each Cell. It always
  exists for cells in the memstore but is not retained forever. It will be kept for
@@ -768,7 +768,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.574">getValueArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.580">getValueArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getValueArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous raw bytes that may start at any index in the containing array. Max length is
  Integer.MAX_VALUE which is 2,147,483,647 bytes.</div>
@@ -784,7 +784,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.579">getValueOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.585">getValueOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getValueOffset()">getValueOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -797,7 +797,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.584">getValueLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.590">getValueLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getValueLength()">getValueLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -810,7 +810,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.589">getTagsArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.595">getTagsArray</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTagsArray()">getTagsArray</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -823,7 +823,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.594">getTagsOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.600">getTagsOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTagsOffset()">getTagsOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -836,7 +836,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.599">getTagsLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.605">getTagsLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTagsLength()">getTagsLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -849,7 +849,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowByteBuffer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.604">getRowByteBuffer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.610">getRowByteBuffer</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getRowByteBuffer()">getRowByteBuffer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -862,7 +862,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowPosition</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.609">getRowPosition</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.615">getRowPosition</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getRowPosition()">getRowPosition</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -875,7 +875,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyByteBuffer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.614">getFamilyByteBuffer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.620">getFamilyByteBuffer</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getFamilyByteBuffer()">getFamilyByteBuffer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -888,7 +888,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyPosition</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.619">getFamilyPosition</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.625">getFamilyPosition</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getFamilyPosition()">getFamilyPosition</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -901,7 +901,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierByteBuffer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.624">getQualifierByteBuffer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.630">getQualifierByteBuffer</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getQualifierByteBuffer()">getQualifierByteBuffer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -914,7 +914,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierPosition</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.629">getQualifierPosition</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.635">getQualifierPosition</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getQualifierPosition()">getQualifierPosition</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -927,7 +927,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueByteBuffer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.634">getValueByteBuffer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.640">getValueByteBuffer</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getValueByteBuffer()">getValueByteBuffer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -940,7 +940,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getValuePosition</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.639">getValuePosition</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.645">getValuePosition</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getValuePosition()">getValuePosition</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -953,7 +953,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsByteBuffer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.644">getTagsByteBuffer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.650">getTagsByteBuffer</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getTagsByteBuffer()">getTagsByteBuffer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -966,7 +966,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsPosition</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.649">getTagsPosition</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.655">getTagsPosition</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html#getTagsPosition()">getTagsPosition</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></code></dd>
@@ -979,7 +979,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.654">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.660">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -993,7 +993,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>setSequenceId</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.659">setSequenceId</a>(long&nbsp;seqId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.665">setSequenceId</a>(long&nbsp;seqId)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/SettableSequenceId.html#setSequenceId(long)">SettableSequenceId</a></code></strong></div>
 <div class="block">Sets with the given seqId.</div>
 <dl>
@@ -1008,7 +1008,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.664">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.670">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Streamable.html#write(java.io.OutputStream)">Streamable</a></code></strong></div>
 <div class="block">Write this cell to an OutputStream.</div>
@@ -1027,7 +1027,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.669">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedCell.html#line.675">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out,
         boolean&nbsp;withTags)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Streamable.html#write(java.io.OutputStream,%20boolean)">Streamable</a></code></strong></div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
index b1c5ea2..1d9bf8a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.292">BufferedDataBlockEncoder.OnheapDecodedCell</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#line.298">BufferedDataBlockEncoder.OnheapDecodedCell</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../../org/apache/hadoop/hbase/SettableSequenceId.html" title="interface in org.apache.hadoop.hbase">SettableSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/Streamable.html" title="interface in org.apache.hadoop.hbase">Streamable</a></pre>
 <div class="block">Copies only the key part of the keybuffer by doing a deep copy and passes the
@@ -378,7 +378,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.294">FIXED_OVERHEAD</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.300">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="keyOnlyBuffer">
@@ -387,7 +387,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>keyOnlyBuffer</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.297">keyOnlyBuffer</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.303">keyOnlyBuffer</a></pre>
 </li>
 </ul>
 <a name="rowLength">
@@ -396,7 +396,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>rowLength</h4>
-<pre>private&nbsp;short <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.298">rowLength</a></pre>
+<pre>private&nbsp;short <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.304">rowLength</a></pre>
 </li>
 </ul>
 <a name="familyOffset">
@@ -405,7 +405,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>familyOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.299">familyOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.305">familyOffset</a></pre>
 </li>
 </ul>
 <a name="familyLength">
@@ -414,7 +414,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>familyLength</h4>
-<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.300">familyLength</a></pre>
+<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.306">familyLength</a></pre>
 </li>
 </ul>
 <a name="qualifierOffset">
@@ -423,7 +423,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>qualifierOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.301">qualifierOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.307">qualifierOffset</a></pre>
 </li>
 </ul>
 <a name="qualifierLength">
@@ -432,7 +432,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>qualifierLength</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.302">qualifierLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.308">qualifierLength</a></pre>
 </li>
 </ul>
 <a name="timestamp">
@@ -441,7 +441,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.303">timestamp</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.309">timestamp</a></pre>
 </li>
 </ul>
 <a name="typeByte">
@@ -450,7 +450,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>typeByte</h4>
-<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.304">typeByte</a></pre>
+<pre>private&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.310">typeByte</a></pre>
 </li>
 </ul>
 <a name="valueBuffer">
@@ -459,7 +459,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>valueBuffer</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.305">valueBuffer</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.311">valueBuffer</a></pre>
 </li>
 </ul>
 <a name="valueOffset">
@@ -468,7 +468,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.306">valueOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.312">valueOffset</a></pre>
 </li>
 </ul>
 <a name="valueLength">
@@ -477,7 +477,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>valueLength</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.307">valueLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.313">valueLength</a></pre>
 </li>
 </ul>
 <a name="tagsBuffer">
@@ -486,7 +486,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>tagsBuffer</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.308">tagsBuffer</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.314">tagsBuffer</a></pre>
 </li>
 </ul>
 <a name="tagsOffset">
@@ -495,7 +495,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>tagsOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.309">tagsOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.315">tagsOffset</a></pre>
 </li>
 </ul>
 <a name="tagsLength">
@@ -504,7 +504,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>tagsLength</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.310">tagsLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.316">tagsLength</a></pre>
 </li>
 </ul>
 <a name="seqId">
@@ -513,7 +513,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockListLast">
 <li class="blockList">
 <h4>seqId</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.311">seqId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.317">seqId</a></pre>
 </li>
 </ul>
 </li>
@@ -530,7 +530,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferedDataBlockEncoder.OnheapDecodedCell</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.313">BufferedDataBlockEncoder.OnheapDecodedCell</a>(byte[]&nbsp;keyBuffer,
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.319">BufferedDataBlockEncoder.OnheapDecodedCell</a>(byte[]&nbsp;keyBuffer,
                                           short&nbsp;rowLength,
                                           int&nbsp;familyOffset,
                                           byte&nbsp;familyLength,
@@ -561,7 +561,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.335">getRowArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.341">getRowArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getRowArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous raw bytes that may start at any index in the containing array. Max length is
  Short.MAX_VALUE which is 32,767 bytes.</div>
@@ -577,7 +577,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.340">getFamilyArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.346">getFamilyArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getFamilyArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous bytes composed of legal HDFS filename characters which may start at any index in the
  containing array. Max length is Byte.MAX_VALUE, which is 127 bytes.</div>
@@ -593,7 +593,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.345">getQualifierArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.351">getQualifierArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getQualifierArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous raw bytes that may start at any index in the containing array.</div>
 <dl>
@@ -608,7 +608,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.350">getRowOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.356">getRowOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getRowOffset()">getRowOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -621,7 +621,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLength</h4>
-<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.355">getRowLength</a>()</pre>
+<pre>public&nbsp;short&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.361">getRowLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getRowLength()">getRowLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -634,7 +634,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.360">getFamilyOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.366">getFamilyOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getFamilyOffset()">getFamilyOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -647,7 +647,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyLength</h4>
-<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.365">getFamilyLength</a>()</pre>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.371">getFamilyLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getFamilyLength()">getFamilyLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -660,7 +660,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.370">getQualifierOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.376">getQualifierOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getQualifierOffset()">getQualifierOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -673,7 +673,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifierLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.375">getQualifierLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.381">getQualifierLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getQualifierLength()">getQualifierLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -686,7 +686,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.380">getTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.386">getTimestamp</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTimestamp()">getTimestamp</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -700,7 +700,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getTypeByte</h4>
-<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.385">getTypeByte</a>()</pre>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.391">getTypeByte</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTypeByte()">getTypeByte</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -713,7 +713,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.390">getSequenceId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.396">getSequenceId</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getSequenceId()">Cell</a></code></strong></div>
 <div class="block">A region-specific unique monotonically increasing sequence ID given to each Cell. It always
  exists for cells in the memstore but is not retained forever. It will be kept for
@@ -731,7 +731,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.395">getValueArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.401">getValueArray</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getValueArray()">Cell</a></code></strong></div>
 <div class="block">Contiguous raw bytes that may start at any index in the containing array. Max length is
  Integer.MAX_VALUE which is 2,147,483,647 bytes.</div>
@@ -747,7 +747,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.400">getValueOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.406">getValueOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getValueOffset()">getValueOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -760,7 +760,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getValueLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.405">getValueLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.411">getValueLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getValueLength()">getValueLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -773,7 +773,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.410">getTagsArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.416">getTagsArray</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTagsArray()">getTagsArray</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -786,7 +786,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsOffset</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.415">getTagsOffset</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.421">getTagsOffset</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTagsOffset()">getTagsOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -799,7 +799,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.420">getTagsLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.426">getTagsLength</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html#getTagsLength()">getTagsLength</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -812,7 +812,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.425">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.431">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -825,7 +825,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>setSequenceId</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.431">setSequenceId</a>(long&nbsp;seqId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.437">setSequenceId</a>(long&nbsp;seqId)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/SettableSequenceId.html#setSequenceId(long)">SettableSequenceId</a></code></strong></div>
 <div class="block">Sets with the given seqId.</div>
 <dl>
@@ -840,7 +840,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.436">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.442">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -854,7 +854,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.441">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.447">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Streamable.html#write(java.io.OutputStream)">Streamable</a></code></strong></div>
 <div class="block">Write this cell to an OutputStream.</div>
@@ -873,7 +873,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="
 <ul class="blockListLast">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.446">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#line.452">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out,
         boolean&nbsp;withTags)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Streamable.html#write(java.io.OutputStream,%20boolean)">Streamable</a></code></strong></div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
index 07553fd..4483e45 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html
@@ -208,8 +208,9 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean)">BufferedDataBlockEncoder.SeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                                                        boolean&nbsp;includeTags)</code>&nbsp;</td>
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair,%20boolean,%20boolean)">BufferedDataBlockEncoder.SeekerState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
+                                                                        boolean&nbsp;includeTags,
+                                                                        boolean&nbsp;tagsCompressed)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -454,14 +455,15 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair, boolean)">
+<a name="BufferedDataBlockEncoder.SeekerState(org.apache.hadoop.hbase.util.ObjectIntPair, boolean, boolean)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferedDataBlockEncoder.SeekerState</h4>
 <pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.135">BufferedDataBlockEncoder.SeekerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&gt;&nbsp;tmpPair,
-                                    boolean&nbsp;includeTags)</pre>
+                                    boolean&nbsp;includeTags,
+                                    boolean&nbsp;tagsCompressed)</pre>
 </li>
 </ul>
 </li>
@@ -478,7 +480,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isValid</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.140">isValid</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.146">isValid</a>()</pre>
 </li>
 </ul>
 <a name="invalidate()">
@@ -487,7 +489,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>invalidate</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.144">invalidate</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.150">invalidate</a>()</pre>
 </li>
 </ul>
 <a name="ensureSpaceForKey()">
@@ -496,7 +498,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSpaceForKey</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.152">ensureSpaceForKey</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.158">ensureSpaceForKey</a>()</pre>
 </li>
 </ul>
 <a name="ensureSpaceForTags()">
@@ -505,7 +507,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSpaceForTags</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.165">ensureSpaceForTags</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.171">ensureSpaceForTags</a>()</pre>
 </li>
 </ul>
 <a name="setKey(byte[], long)">
@@ -514,7 +516,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setKey</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.178">setKey</a>(byte[]&nbsp;keyBuffer,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.184">setKey</a>(byte[]&nbsp;keyBuffer,
           long&nbsp;memTS)</pre>
 </li>
 </ul>
@@ -524,7 +526,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromNext</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.188">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&nbsp;nextState)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.194">copyFromNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.SeekerState</a>&nbsp;nextState)</pre>
 <div class="block">Copy the state from the next one into this instance (the previous state
  placeholder). Used to save the previous state when we are advancing the
  seeker to the next key/value.</div>
@@ -536,7 +538,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toCell</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.218">toCell</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.224">toCell</a>()</pre>
 </li>
 </ul>
 <a name="toOnheapCell(java.nio.ByteBuffer, int, int)">
@@ -545,7 +547,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toOnheapCell</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.241">toOnheapCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;valAndTagsBuffer,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.247">toOnheapCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;valAndTagsBuffer,
                 int&nbsp;vOffset,
                 int&nbsp;tagsLenSerializationSize)</pre>
 </li>
@@ -556,7 +558,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toOffheapCell</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.263">toOffheapCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;valAndTagsBuffer,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#line.269">toOffheapCell</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;valAndTagsBuffer,
                  int&nbsp;vOffset,
                  int&nbsp;tagsLenSerializationSize)</pre>
 </li>


[39/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
index a7d9e7f..14c3139 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
@@ -651,6 +651,10 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></td>
+<td class="colLast"><span class="strong">SnapshotHFileCleaner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.html#master">master</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></td>
 <td class="colLast"><span class="strong">MasterSnapshotVerifier.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.html#services">services</a></strong></code>&nbsp;</td>
 </tr>
 </tbody>
@@ -676,8 +680,9 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices)">DisabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
-                                                        <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">DisabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                                                        <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                                                        <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html#EnabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">EnabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
@@ -698,8 +703,9 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices)">TakeSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
-                                      <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">TakeSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                                      <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                                      <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
index c926072..9a41ab1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.30">BaseFileCleanerDelegate</a>
+<pre>public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.32">BaseFileCleanerDelegate</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" title="class in org.apache.hadoop.hbase">BaseConfigurable</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner">FileCleanerDelegate</a></pre>
 <div class="block">Base class for file cleaners which allows subclasses to implement a simple
@@ -155,6 +155,12 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Fil
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>
+<div class="block">this method is used to pass some instance into subclass</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected abstract boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#isFileDeletable(org.apache.hadoop.fs.FileStatus)">isFileDeletable</a></strong>(org.apache.hadoop.fs.FileStatus&nbsp;fStat)</code>
 <div class="block">Should the master delete the file or keep it?</div>
@@ -209,7 +215,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Fil
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BaseFileCleanerDelegate</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.30">BaseFileCleanerDelegate</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.32">BaseFileCleanerDelegate</a>()</pre>
 </li>
 </ul>
 </li>
@@ -226,7 +232,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Fil
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeletableFiles</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.34">getDeletableFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.36">getDeletableFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">FileCleanerDelegate</a></code></strong></div>
 <div class="block">Determines which of the given files are safe to delete</div>
 <dl>
@@ -236,13 +242,28 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Fil
 <dt><span class="strong">Returns:</span></dt><dd>files that are ok to delete according to this cleaner</dd></dl>
 </li>
 </ul>
+<a name="init(java.util.Map)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>init</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.45">init</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#init(java.util.Map)">FileCleanerDelegate</a></code></strong></div>
+<div class="block">this method is used to pass some instance into subclass</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#init(java.util.Map)">init</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner">FileCleanerDelegate</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="isFileDeletable(org.apache.hadoop.fs.FileStatus)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isFileDeletable</h4>
-<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.47">isFileDeletable</a>(org.apache.hadoop.fs.FileStatus&nbsp;fStat)</pre>
+<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#line.54">isFileDeletable</a>(org.apache.hadoop.fs.FileStatus&nbsp;fStat)</pre>
 <div class="block">Should the master delete the file or keep it?</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>fStat</code> - file status of the file to check</dd>
 <dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if the file is deletable, <tt>false</tt> if not</dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html
index 8796757..f6313da 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html
@@ -202,7 +202,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFi
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#isFileDeletable(org.apache.hadoop.fs.FileStatus)">isFileDeletable</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#isFileDeletable(org.apache.hadoop.fs.FileStatus)">isFileDeletable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html
index e4c781e..0868a51 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.html
@@ -182,7 +182,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFi
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
index 8dbba82..1f34ce1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html
@@ -150,6 +150,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#oldFileDir">oldFileDir</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#params">params</a></strong></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -173,6 +177,16 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
                         org.apache.hadoop.fs.Path&nbsp;oldFileDir,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#CleanerChore(java.lang.String,%20int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.lang.String,%20java.util.Map)">CleanerChore</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+                        int&nbsp;sleepPeriod,
+                        <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;s,
+                        org.apache.hadoop.conf.Configuration&nbsp;conf,
+                        org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                        org.apache.hadoop.fs.Path&nbsp;oldFileDir,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -307,12 +321,21 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <a name="cleanersChain">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>cleanersChain</h4>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/cleaner/CleanerChore.html" title="type parameter in CleanerChore">T</a> extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner">FileCleanerDelegate</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.51">cleanersChain</a></pre>
 </li>
 </ul>
+<a name="params">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>params</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.52">params</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -324,17 +347,33 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <a name="CleanerChore(java.lang.String, int, org.apache.hadoop.hbase.Stoppable, org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path, java.lang.String)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>CleanerChore</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.62">CleanerChore</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.54">CleanerChore</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
             int&nbsp;sleepPeriod,
             <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;s,
             org.apache.hadoop.conf.Configuration&nbsp;conf,
             org.apache.hadoop.fs.FileSystem&nbsp;fs,
             org.apache.hadoop.fs.Path&nbsp;oldFileDir,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey)</pre>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - name of the chore being run</dd><dd><code>sleepPeriod</code> - the period of time to sleep between each run</dd><dd><code>s</code> - the stopper</dd><dd><code>conf</code> - configuration to use</dd><dd><code>fs</code> - handle to the FS</dd><dd><code>oldFileDir</code> - the path to the archived files</dd><dd><code>confKey</code> - configuration key for the classes to instantiate</dd></dl>
+</li>
+</ul>
+<a name="CleanerChore(java.lang.String, int, org.apache.hadoop.hbase.Stoppable, org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path, java.lang.String, java.util.Map)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CleanerChore</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.69">CleanerChore</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+            int&nbsp;sleepPeriod,
+            <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;s,
+            org.apache.hadoop.conf.Configuration&nbsp;conf,
+            org.apache.hadoop.fs.FileSystem&nbsp;fs,
+            org.apache.hadoop.fs.Path&nbsp;oldFileDir,
+            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey,
+            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</pre>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - name of the chore being run</dd><dd><code>sleepPeriod</code> - the period of time to sleep between each run</dd><dd><code>s</code> - the stopper</dd><dd><code>conf</code> - configuration to use</dd><dd><code>fs</code> - handle to the FS</dd><dd><code>oldFileDir</code> - the path to the archived files</dd><dd><code>confKey</code> - configuration key for the classes to instantiate</dd><dd><code>params</code> - members could be used in cleaner</dd></dl>
 </li>
 </ul>
 </li>
@@ -351,7 +390,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>validate</h4>
-<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.78">validate</a>(org.apache.hadoop.fs.Path&nbsp;file)</pre>
+<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.86">validate</a>(org.apache.hadoop.fs.Path&nbsp;file)</pre>
 <div class="block">Validate the file to see if it even belongs in the directory. If it is valid, then the file
  will go through the cleaner delegates, but otherwise the file is just deleted.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>file</code> - full <code>Path</code> of the file to be checked</dd>
@@ -364,7 +403,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>initCleanerChain</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.84">initCleanerChain</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.92">initCleanerChain</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey)</pre>
 <div class="block">Instantiate and initialize all the file cleaners set in the configuration</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>confKey</code> - key to get the file cleaner classes from the configuration</dd></dl>
 </li>
@@ -375,7 +414,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>newFileCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="type parameter in CleanerChore">T</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.105">newFileCleaner</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="type parameter in CleanerChore">T</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.113">newFileCleaner</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className,
                org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">A utility method to create new instances of LogCleanerDelegate based on the class name of the
  LogCleanerDelegate.</div>
@@ -389,7 +428,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.121">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.130">chore</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore()">ScheduledChore</a></code></strong></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
@@ -404,7 +443,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndDeleteEntries</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.140">checkAndDeleteEntries</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;entries)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.149">checkAndDeleteEntries</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;entries)</pre>
 <div class="block">Loop over the given directory entries, and check whether they can be deleted.
  If an entry is itself a directory it will be recursively checked and deleted itself iff
  all subentries are deleted (and no new subentries are added in the mean time)</div>
@@ -418,7 +457,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndDeleteDirectory</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.174">checkAndDeleteDirectory</a>(org.apache.hadoop.fs.Path&nbsp;dir)</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.183">checkAndDeleteDirectory</a>(org.apache.hadoop.fs.Path&nbsp;dir)</pre>
 <div class="block">Attempt to delete a directory and all files under that directory. Each child file is passed
  through the delegates to see if it can be deleted. If the directory has no children when the
  cleaners have finished it is deleted.
@@ -435,7 +474,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndDeleteFiles</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.213">checkAndDeleteFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.222">checkAndDeleteFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
 <div class="block">Run the given files through each of the cleaners to see if it should be deleted, deleting it if
  necessary.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>files</code> - List of FileStatus for the files to check (and possibly delete)</dd>
@@ -448,7 +487,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.276">cleanup</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#line.285">cleanup</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cleanup()">ScheduledChore</a></code></strong></div>
 <div class="block">Override to run cleanup tasks when the Chore encounters an error and must stop running</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
index df0bdb4..fb3a0cf 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html
@@ -96,7 +96,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#line.31">FileCleanerDelegate</a>
+public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#line.33">FileCleanerDelegate</a>
 extends org.apache.hadoop.conf.Configurable, <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">General interface for cleaning files from a folder (generally an archive or
  backup folder). These are chained via the <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner"><code>CleanerChore</code></a> to determine
@@ -125,6 +125,12 @@ extends org.apache.hadoop.conf.Configurable, <a href="../../../../../../org/apac
 <div class="block">Determines which of the given files are safe to delete</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#init(java.util.Map)">init</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>
+<div class="block">this method is used to pass some instance into subclass</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.conf.Configurable">
@@ -157,15 +163,25 @@ extends org.apache.hadoop.conf.Configurable, <a href="../../../../../../org/apac
 <a name="getDeletableFiles(java.lang.Iterable)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getDeletableFiles</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#line.38">getDeletableFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#line.40">getDeletableFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files)</pre>
 <div class="block">Determines which of the given files are safe to delete</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>files</code> - files to check for deletion</dd>
 <dt><span class="strong">Returns:</span></dt><dd>files that are ok to delete according to this cleaner</dd></dl>
 </li>
 </ul>
+<a name="init(java.util.Map)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>init</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html#line.46">init</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</pre>
+<div class="block">this method is used to pass some instance into subclass</div>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
index e9d2630..f6a7cf8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html
@@ -110,7 +110,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.34">HFileCleaner</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.35">HFileCleaner</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseHFileCleanerDelegate</a>&gt;</pre>
 <div class="block">This Chore, every time it runs, will clear the HFiles in the hfile archive
  folder that are deletable for each HFile cleaner in the chain.</div>
@@ -142,7 +142,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#cleanersChain">cleanersChain</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#cleanersChain">cleanersChain</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#params">params</a></code></li>
 </ul>
 </li>
 </ul>
@@ -164,6 +164,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
                         org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;directory)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#HFileCleaner(int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.util.Map)">HFileCleaner</a></strong>(int&nbsp;period,
+                        <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                        org.apache.hadoop.conf.Configuration&nbsp;conf,
+                        org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                        org.apache.hadoop.fs.Path&nbsp;directory,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -233,7 +241,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MASTER_HFILE_CLEANER_PLUGINS</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.36">MASTER_HFILE_CLEANER_PLUGINS</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.37">MASTER_HFILE_CLEANER_PLUGINS</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -248,15 +256,29 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
 <a name="HFileCleaner(int, org.apache.hadoop.hbase.Stoppable, org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>HFileCleaner</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.45">HFileCleaner</a>(int&nbsp;period,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.39">HFileCleaner</a>(int&nbsp;period,
             <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
             org.apache.hadoop.conf.Configuration&nbsp;conf,
             org.apache.hadoop.fs.FileSystem&nbsp;fs,
             org.apache.hadoop.fs.Path&nbsp;directory)</pre>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>period</code> - the period of time to sleep between each run</dd><dd><code>stopper</code> - the stopper</dd><dd><code>conf</code> - configuration to use</dd><dd><code>fs</code> - handle to the FS</dd><dd><code>directory</code> - directory to be cleaned</dd></dl>
+</li>
+</ul>
+<a name="HFileCleaner(int, org.apache.hadoop.hbase.Stoppable, org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path, java.util.Map)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HFileCleaner</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.52">HFileCleaner</a>(int&nbsp;period,
+            <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+            org.apache.hadoop.conf.Configuration&nbsp;conf,
+            org.apache.hadoop.fs.FileSystem&nbsp;fs,
+            org.apache.hadoop.fs.Path&nbsp;directory,
+            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</pre>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>period</code> - the period of time to sleep between each run</dd><dd><code>stopper</code> - the stopper</dd><dd><code>conf</code> - configuration to use</dd><dd><code>fs</code> - handle to the FS</dd><dd><code>directory</code> - directory to be cleaned</dd><dd><code>params</code> - params could be used in subclass of BaseHFileCleanerDelegate</dd></dl>
 </li>
 </ul>
 </li>
@@ -273,7 +295,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
 <ul class="blockList">
 <li class="blockList">
 <h4>validate</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.51">validate</a>(org.apache.hadoop.fs.Path&nbsp;file)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.59">validate</a>(org.apache.hadoop.fs.Path&nbsp;file)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#validate(org.apache.hadoop.fs.Path)">CleanerChore</a></code></strong></div>
 <div class="block">Validate the file to see if it even belongs in the directory. If it is valid, then the file
  will go through the cleaner delegates, but otherwise the file is just deleted.</div>
@@ -290,7 +312,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getDelegatesForTesting</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/cleaner/BaseHFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseHFileCleanerDelegate</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.61">getDelegatesForTesting</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/cleaner/BaseHFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseHFileCleanerDelegate</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#line.69">getDelegatesForTesting</a>()</pre>
 <div class="block">Exposed for TESTING!</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.html
index edd18ef..0a1f645 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.html
@@ -204,7 +204,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/LogCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/LogCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/LogCleaner.html
index 0dd8fd1..f189ad7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/LogCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/LogCleaner.html
@@ -143,7 +143,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/Cleane
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#cleanersChain">cleanersChain</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#cleanersChain">cleanersChain</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#params">params</a></code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.html
index 64be3e7..74fceb7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.html
@@ -208,7 +208,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.html
index f1d033f..4471cbd 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.html
@@ -214,7 +214,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseLo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 6796dd2..e0cc4a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -323,11 +323,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.TerminationStatus</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="strong">RegionState.State</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="strong">MetricsMasterSourceFactoryImpl.FactoryStorage</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="strong">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">RegionState.State</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="strong">MasterRpcServices.BalanceSwitchMode</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="strong">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 0a500ef..bef220f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -153,8 +153,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">DisableTableProcedure.MarkRegionOfflineOpResult</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="strong">ServerProcedureInterface.ServerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">DisableTableProcedure.MarkRegionOfflineOpResult</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="strong">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
index 517fd20..40af4f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html
@@ -144,7 +144,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeS
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.snapshot.<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#fs">fs</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#htd">htd</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#master">master</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#metricsSnapshot">metricsSnapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#monitor">monitor</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#rootDir">rootDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshot">snapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.
 html#snapshotManifest">snapshotManifest</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotTable">snapshotTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#status">status</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLock">tableLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLockManager">tableLockManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#workingDir">workingDir</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#fs">fs</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#htd">htd</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#master">master</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#metricsSnapshot">metricsSnapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#monitor">monitor</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#rootDir">rootDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshot">snapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.
 html#snapshotManager">snapshotManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotManifest">snapshotManifest</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotTable">snapshotTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#status">status</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLock">tableLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLockManager">tableLockManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#workingDir">workingDir</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.executor.EventHandler">
@@ -167,8 +167,9 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeS
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices)">DisabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
-                                                        <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</code>&nbsp;</td>
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">DisabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                                                        <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                                                        <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -252,14 +253,15 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeS
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription, org.apache.hadoop.hbase.master.MasterServices)">
+<a name="DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription, org.apache.hadoop.hbase.master.MasterServices, org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DisabledTableSnapshotHandler</h4>
 <pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#line.60">DisabledTableSnapshotHandler</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
-                            <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+                            <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                            <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshot</code> - descriptor of the snapshot to take</dd><dd><code>masterServices</code> - master services provider</dd></dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
index 06bcb48..af8020e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html
@@ -147,7 +147,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeS
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.snapshot.<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#fs">fs</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#htd">htd</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#master">master</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#metricsSnapshot">metricsSnapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#monitor">monitor</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#rootDir">rootDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshot">snapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.
 html#snapshotManifest">snapshotManifest</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotTable">snapshotTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#status">status</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLock">tableLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLockManager">tableLockManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#workingDir">workingDir</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#fs">fs</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#htd">htd</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#master">master</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#metricsSnapshot">metricsSnapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#monitor">monitor</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#rootDir">rootDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshot">snapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.
 html#snapshotManager">snapshotManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotManifest">snapshotManifest</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotTable">snapshotTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#status">status</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLock">tableLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLockManager">tableLockManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#workingDir">workingDir</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.executor.EventHandler">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
index 7be4910..6d90655 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.327">SnapshotFileCache.RefreshCacheTask</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.335">SnapshotFileCache.RefreshCacheTask</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html?is-external=true" title="class or interface in java.util">TimerTask</a></pre>
 <div class="block">Simple helper task that just periodically attempts to refresh the cache</div>
 </li>
@@ -185,7 +185,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotFileCache.RefreshCacheTask</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html#line.327">SnapshotFileCache.RefreshCacheTask</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html#line.335">SnapshotFileCache.RefreshCacheTask</a>()</pre>
 </li>
 </ul>
 </li>
@@ -202,7 +202,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html#line.329">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html#line.337">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
index e9e3b47..6d120c4 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.355">SnapshotFileCache.SnapshotDirectoryInfo</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.363">SnapshotFileCache.SnapshotDirectoryInfo</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Information about a snapshot directory</div>
 </li>
@@ -199,7 +199,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastModified</h4>
-<pre>long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.356">lastModified</a></pre>
+<pre>long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.364">lastModified</a></pre>
 </li>
 </ul>
 <a name="files">
@@ -208,7 +208,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>files</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.357">files</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.365">files</a></pre>
 </li>
 </ul>
 </li>
@@ -225,7 +225,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotFileCache.SnapshotDirectoryInfo</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.359">SnapshotFileCache.SnapshotDirectoryInfo</a>(long&nbsp;mtime,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.367">SnapshotFileCache.SnapshotDirectoryInfo</a>(long&nbsp;mtime,
                                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;files)</pre>
 </li>
 </ul>
@@ -243,7 +243,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFiles</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.367">getFiles</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.375">getFiles</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the hfiles in the snapshot when <tt>this</tt> was made.</dd></dl>
 </li>
 </ul>
@@ -253,7 +253,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasBeenModified</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.377">hasBeenModified</a>(long&nbsp;mtime)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html#line.385">hasBeenModified</a>(long&nbsp;mtime)</pre>
 <div class="block">Check if the snapshot directory has been modified</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>mtime</code> - current modification time of the directory</dd>
 <dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if it the modification time of the directory is newer time when we

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
index 2f107f1..de09852 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html
@@ -91,7 +91,7 @@
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.78">SnapshotFileCache.SnapshotFileInspector</a></pre>
+<pre>static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.79">SnapshotFileCache.SnapshotFileInspector</a></pre>
 </li>
 </ul>
 </div>
@@ -137,7 +137,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filesUnderSnapshot</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html#line.84">filesUnderSnapshot</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir)
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html#line.85">filesUnderSnapshot</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir)
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns a collection of file names needed by the snapshot.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshotDir</code> - <code>Path</code> to the snapshot directory to scan.</dd>


[47/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html b/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
index cc2dd0b..6e070df 100644
--- a/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
+++ b/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
@@ -114,7 +114,7 @@
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/master/ClusterSchemaException.html" title="class in org.apache.hadoop.hbase.master">ClusterSchemaException</a>, <a href="../../../../org/apache/hadoop/hbase/codec/CodecException.html" title="class in org.apache.hadoop.hbase.codec">CodecException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">CorruptedWALProcedureStoreException</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/wal/DamagedWALException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">DamagedWALException</a>, <a href="../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc">FailedServerException</a>, <a href="../../../../org/
 apache/hadoop/hbase/ipc/IPCUtil.CellScannerButNoCodecException.html" title="class in org.apache.hadoop.hbase.ipc">IPCUtil.CellScannerButNoCodecException</a>, <a href="../../../../org/apache/hadoop/hbase/util/LeaseNotRecoveredException.html" title="class in org.apache.hadoop.hbase.util">LeaseNotRecoveredException</a>, <a href="../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a>, <a href="../../../../org/apache/hadoop/hbase/RegionException.html" title="class in org.apache.hadoop.hbase">RegionException</a>, <a href="../../../../org/apache/hadoop/hbase/ServiceNotRunningException.html" title="class in org.apache.hadoop.hbase">ServiceNotRunningException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/StoppedRpcClientException.html" title="class in org.apache.hadoop.hbase.ipc">StoppedRpcClientException</a>, <a href="../../../../org/apache/hadoop/hbase/TableInfoMissingException.html" title="class in org.apache.
 hadoop.hbase">TableInfoMissingException</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a>, <a href="../../../../org/apache/hadoop/hbase/client/WrongRowIOException.html" title="class in org.apache.hadoop.hbase.client">WrongRowIOException</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/master/ClusterSchemaException.html" title="class in org.apache.hadoop.hbase.master">ClusterSchemaException</a>, <a href="../../../../org/apache/hadoop/hbase/codec/CodecException.html" title="class in org.apache.hadoop.hbase.codec">CodecException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">CorruptedWALProcedureStoreException</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/wal/DamagedWALException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">DamagedWALException</a>, <a href="../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc">FailedServerException</a>, <a href="../../../../org/
 apache/hadoop/hbase/ipc/IPCUtil.CellScannerButNoCodecException.html" title="class in org.apache.hadoop.hbase.ipc">IPCUtil.CellScannerButNoCodecException</a>, <a href="../../../../org/apache/hadoop/hbase/util/LeaseNotRecoveredException.html" title="class in org.apache.hadoop.hbase.util">LeaseNotRecoveredException</a>, <a href="../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a>, <a href="../../../../org/apache/hadoop/hbase/RegionException.html" title="class in org.apache.hadoop.hbase">RegionException</a>, <a href="../../../../org/apache/hadoop/hbase/ServiceNotRunningException.html" title="class in org.apache.hadoop.hbase">ServiceNotRunningException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/StoppedRpcClientException.html" title="class in org.apache.hadoop.hbase.ipc">StoppedRpcClientException</a>, <a href="../../../../org/apache/hadoop/hbase/TableInfoMissingException.html" title="class in org.apache.
 hadoop.hbase">TableInfoMissingException</a>, <a href="../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a>, <a href="../../../../org/apache/hadoop/hbase/client/WrongRowIOException.html" title="class in org.apache.hadoop.hbase.client">WrongRowIOException</a></dd>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.html b/devapidocs/org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.html
index b7d8496..1165096 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.html
@@ -216,7 +216,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseHF
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.cleaner.<a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html" title="class in org.apache.hadoop.hbase.master.cleaner">BaseFileCleanerDelegate</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#getDeletableFiles(java.lang.Iterable)">getDeletableFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.html#init(java.util.Map)">init</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferedKeyOnlyKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferedKeyOnlyKeyValue.html b/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferedKeyOnlyKeyValue.html
index f89eeb2..93c0b74 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferedKeyOnlyKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferedKeyOnlyKeyValue.html
@@ -75,6 +75,10 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.io.encoding">org.apache.hadoop.hbase.io.encoding</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.io.hfile">org.apache.hadoop.hbase.io.hfile</a></td>
 <td class="colLast">
 <div class="block">Provides implementations of <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFile</code></a> and HFile
@@ -86,6 +90,24 @@
 </li>
 <li class="blockList">
 <ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.io.encoding">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferedKeyOnlyKeyValue</a> in <a href="../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a> declared as <a href="../../../../../org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferedKeyOnlyKeyValue</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferedKeyOnlyKeyValue</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.SeekerState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#currentKey">currentKey</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.io.hfile">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index 056b506..a83dc84 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -3141,6 +3141,12 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">RowIndexEncoderV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#lastCell">lastCell</a></strong></code>
+<div class="block">The Cell previously appended.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">EncodingState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/EncodingState.html#prevCell">prevCell</a></strong></code>
 <div class="block">The previous Cell the encoder encoded.</div>
@@ -3157,61 +3163,82 @@ service.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#createFirstKeyCell(java.nio.ByteBuffer,%20int)">createFirstKeyCell</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createFirstKeyCell(java.nio.ByteBuffer,%20int)">createFirstKeyCell</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
                                     int&nbsp;keyLength)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#createFirstKeyCell(java.nio.ByteBuffer,%20int)">createFirstKeyCell</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;key,
+                                    int&nbsp;keyLength)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#getCell()">getCell</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.EncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getCell()">getCell</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getCell()">getCell</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">CopyKeyDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>
 <div class="block">Return first key in block as a cell.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">FastDiffDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">PrefixKeyDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">DiffKeyDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#getKey()">getKey</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.EncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#getKey()">getKey</a></strong>()</code>
 <div class="block">From the current position creates a cell using the key part
  of the current buffer</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#getKey()">getKey</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.SeekerState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#toCell()">toCell</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.SeekerState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#toCell()">toCell</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.SeekerState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#toOffheapCell(java.nio.ByteBuffer,%20int,%20int)">toOffheapCell</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;valAndTagsBuffer,
                           int&nbsp;vOffset,
                           int&nbsp;tagsLenSerializationSize)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.SeekerState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.SeekerState.html#toOnheapCell(java.nio.ByteBuffer,%20int,%20int)">toOnheapCell</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;valAndTagsBuffer,
                         int&nbsp;vOffset,
@@ -3248,6 +3275,15 @@ service.</div>
                                           <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#binarySearch(org.apache.hadoop.hbase.Cell,%20boolean)">binarySearch</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+                        boolean&nbsp;seekBefore)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">RowIndexEncoderV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#checkRow(org.apache.hadoop.hbase.Cell)">checkRow</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#compareCommonFamilyPrefix(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20int)">compareCommonFamilyPrefix</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                                   <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
@@ -3280,6 +3316,16 @@ service.</div>
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                    <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareRows(java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Cell)">compareRows</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
+                      <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#compareTypeBytes(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell)">compareTypeBytes</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
                                 <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>&nbsp;</td>
@@ -3298,72 +3344,78 @@ service.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
-<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+            <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
+            <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#encode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext,%20java.io.DataOutputStream)">encode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockEncodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockEncodingContext</a>&nbsp;encodingCtx,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>
 <div class="block">Encodes a KeyValue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#findCommonPrefixInFamilyPart(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20int)">findCommonPrefixInFamilyPart</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                                         <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
                                                         int&nbsp;familyCommonPrefix)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#findCommonPrefixInQualifierPart(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20int)">findCommonPrefixInQualifierPart</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                                               <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
                                                               int&nbsp;qualifierCommonPrefix)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#findCommonPrefixInRowPart(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20int)">findCommonPrefixInRowPart</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                                   <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
                                                   int&nbsp;rowCommonPrefix)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">CopyKeyDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.html#internalEncode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext,%20java.io.DataOutputStream)">internalEncode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingContext,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>abstract int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.html#internalEncode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext,%20java.io.DataOutputStream)">internalEncode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingCtx,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">FastDiffDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#internalEncode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext,%20java.io.DataOutputStream)">internalEncode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingContext,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">PrefixKeyDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#internalEncode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext,%20java.io.DataOutputStream)">internalEncode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingContext,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">DiffKeyDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#internalEncode(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext,%20java.io.DataOutputStream)">internalEncode</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultEncodingContext</a>&nbsp;encodingContext,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html?is-external=true" title="class or interface in java.io">DataOutputStream</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">seekToKeyInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
                                 boolean&nbsp;seekBefore)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.EncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">seekToKeyInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
                                 boolean&nbsp;seekBefore)</code>
@@ -3375,7 +3427,16 @@ service.</div>
  seekBefore</code> is true.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#seekToKeyInBlock(org.apache.hadoop.hbase.Cell,%20boolean)">seekToKeyInBlock</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekCell,
+                                boolean&nbsp;seekBefore)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="strong">RowIndexEncoderV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html#write(org.apache.hadoop.hbase.Cell)">write</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">PrefixKeyDeltaEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#writeKeyExcludingCommon(org.apache.hadoop.hbase.Cell,%20int,%20java.io.DataOutputStream)">writeKeyExcludingCommon</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                                               int&nbsp;commonPrefix,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/class-use/CellComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/CellComparator.html b/devapidocs/org/apache/hadoop/hbase/class-use/CellComparator.html
index c1a3ddb..14ab498 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/CellComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/CellComparator.html
@@ -227,6 +227,10 @@
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#comparator">comparator</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#comparator">comparator</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -249,10 +253,20 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#compareKey(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.Cell)">compareKey</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                    <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">CopyKeyDataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                         <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                        <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html" title="interface in org.apache.hadoop.hbase.io.encoding">DataBlockEncoder.EncodedSeeker</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#createSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">createSeeker</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
@@ -287,6 +301,10 @@
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#BufferedDataBlockEncoder.BufferedEncodedSeeker(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">BufferedDataBlockEncoder.BufferedEncodedSeeker</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
                                                                                             <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#RowIndexSeekerV1(org.apache.hadoop.hbase.CellComparator,%20org.apache.hadoop.hbase.io.encoding.HFileBlockDecodingContext)">RowIndexSeekerV1</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator,
+                                <a href="../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a>&nbsp;decodingCtx)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html b/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
index e4c8960..85873a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
@@ -436,6 +436,10 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions">UnknownProtocolException</a></strong></code>
 <div class="block">An error requesting an RPC protocol that the server is not serving.</div>
 </td>
@@ -730,10 +734,6 @@
 <div class="block">Thrown if request for nonexistent column family.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></strong></code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html b/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
index d3251c4..5a415b8 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
@@ -457,12 +457,30 @@
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html#CleanerChore(java.lang.String,%20int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.lang.String,%20java.util.Map)">CleanerChore</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+                        int&nbsp;sleepPeriod,
+                        <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;s,
+                        org.apache.hadoop.conf.Configuration&nbsp;conf,
+                        org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                        org.apache.hadoop.fs.Path&nbsp;oldFileDir,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#HFileCleaner(int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path)">HFileCleaner</a></strong>(int&nbsp;period,
                         <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
                         org.apache.hadoop.conf.Configuration&nbsp;conf,
                         org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;directory)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html#HFileCleaner(int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20java.util.Map)">HFileCleaner</a></strong>(int&nbsp;period,
+                        <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                        org.apache.hadoop.conf.Configuration&nbsp;conf,
+                        org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                        org.apache.hadoop.fs.Path&nbsp;directory,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;params)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html#LogCleaner(int,%20org.apache.hadoop.hbase.Stoppable,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path)">LogCleaner</a></strong>(int&nbsp;p,
                     <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;s,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
index 2593fbc..e00c325 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
@@ -2440,6 +2440,10 @@ service.</div>
 <div class="block">Exception thrown when a blocking operation times out.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -2913,6 +2917,20 @@ service.</div>
  and storing raw size of rest.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexCodecV1</a></strong></code>
+<div class="block">Store cells following every row's start offset, so we can binary search to a row's cells.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexEncoderV1</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html" title="class in org.apache.hadoop.hbase.io.encoding">RowIndexSeekerV1</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -5533,7 +5551,7 @@ service.</div>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></strong></code>
-<div class="block">A pool of <code>HeapMemStoreLAB.Chunk</code> instances.</div>
+<div class="block">A pool of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -5980,10 +5998,6 @@ service.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver">VersionedSegmentsList</a></strong></code>
 <div class="block">A list of segment managers coupled with the version of the memstore (version at the time it was
  created).</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
index bd06720..54701ad 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -80,12 +80,12 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 18c1987..6048992 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -401,15 +401,15 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</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="strong">CompactType</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="strong">Consistency</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="strong">Durability</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="strong">MasterSwitchType</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="strong">SnapshotType</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="strong">CompactionState</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="strong">Consistency</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="strong">IsolationLevel</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="strong">TableState.State</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="strong">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/TimeoutIOException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/TimeoutIOException.html b/devapidocs/org/apache/hadoop/hbase/exceptions/TimeoutIOException.html
index 5fee27b..4028f8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/TimeoutIOException.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/TimeoutIOException.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/exceptions/RegionOpeningException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" target="_top">Frames</a></li>
@@ -250,7 +250,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.ht
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/exceptions/RegionOpeningException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html b/devapidocs/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html
new file mode 100644
index 0000000..b0c8c09
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html
@@ -0,0 +1,336 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="UnexpectedStateException (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/UnexpectedStateException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" target="_top">Frames</a></li>
+<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods_inherited_from_class_java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.exceptions</div>
+<h2 title="Class UnexpectedStateException" class="title">Class UnexpectedStateException</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.exceptions.UnexpectedStateException</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
+</dl>
+<hr>
+<br>
+<pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#line.24">UnexpectedStateException</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.exceptions.UnexpectedStateException">Serialized Form</a></dd></dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#serialVersionUID">serialVersionUID</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#UnexpectedStateException()">UnexpectedStateException</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#UnexpectedStateException(java.lang.String)">UnexpectedStateException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#UnexpectedStateException(java.lang.String,%20java.lang.Throwable)">UnexpectedStateException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
+                                                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#UnexpectedStateException(java.lang.Throwable)">UnexpectedStateException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Throwable">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed(java.lang.Throwable)" title="class or interface in java.lang">addSuppressed</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or inter
 face in java.lang">getStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed()" title="class or interface in java.lang">getSuppressed</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lan
 g/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="serialVersionUID">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>serialVersionUID</h4>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#line.26">serialVersionUID</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.exceptions.UnexpectedStateException.serialVersionUID">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="UnexpectedStateException()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UnexpectedStateException</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#line.28">UnexpectedStateException</a>()</pre>
+</li>
+</ul>
+<a name="UnexpectedStateException(java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UnexpectedStateException</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#line.32">UnexpectedStateException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
+</li>
+</ul>
+<a name="UnexpectedStateException(java.lang.String, java.lang.Throwable)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UnexpectedStateException</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#line.36">UnexpectedStateException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
+                        <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
+</li>
+</ul>
+<a name="UnexpectedStateException(java.lang.Throwable)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>UnexpectedStateException</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html#line.40">UnexpectedStateException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/UnexpectedStateException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" target="_top">Frames</a></li>
+<li><a href="UnexpectedStateException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods_inherited_from_class_java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html b/devapidocs/org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html
index a28001e..b764389 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/UnknownProtocolException.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
 <li>Next Class</li>
 </ul>
 <ul class="navList">
@@ -312,7 +312,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.ht
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/TimeoutIOException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions"><span class="strong">Prev Class</span></a></li>
 <li>Next Class</li>
 </ul>
 <ul class="navList">


[17/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
new file mode 100644
index 0000000..c802bc4
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
@@ -0,0 +1,485 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with this<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * work for additional information regarding copyright ownership. The ASF<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * licenses this file to you under the Apache License, Version 2.0 (the<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * "License"); you may not use this file except in compliance with the License.<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * You may obtain a copy of the License at<a name="line.7"></a>
+<span class="sourceLineNo">008</span> *<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * License for the specific language governing permissions and limitations<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * under the License.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> */<a name="line.16"></a>
+<span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.nio.ByteBuffer;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.ByteBufferedKeyOnlyKeyValue;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.Cell;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HConstants;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.OffheapKeyValue;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.SizeCachedKeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.SizeCachedNoTagsKeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoder.EncodedSeeker;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.ObjectIntPair;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>@InterfaceAudience.Private<a name="line.38"></a>
+<span class="sourceLineNo">039</span>public class RowIndexSeekerV1 implements EncodedSeeker {<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private HFileBlockDecodingContext decodingCtx;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private final CellComparator comparator;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  // many object creations.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private ByteBuff currentBuffer;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private SeekerState current = new SeekerState(); // always valid<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private SeekerState previous = new SeekerState(); // may not be valid<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private int rowNumber;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private ByteBuff rowOffsets = null;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public RowIndexSeekerV1(CellComparator comparator,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    this.comparator = comparator;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    this.decodingCtx = decodingCtx;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setCurrentBuffer(ByteBuff buffer) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    int onDiskSize = buffer.getInt(buffer.limit() - Bytes.SIZEOF_INT);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    // Data part<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    ByteBuff dup = buffer.duplicate();<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    dup.position(buffer.position());<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    dup.limit(buffer.position() + onDiskSize);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    currentBuffer = dup.slice();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    current.currentBuffer = currentBuffer;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    buffer.skip(onDiskSize);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // Row offset<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    rowNumber = buffer.getInt();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    int totalRowOffsetsLength = Bytes.SIZEOF_INT * rowNumber;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    ByteBuff rowDup = buffer.duplicate();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    rowDup.position(buffer.position());<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    rowDup.limit(buffer.position() + totalRowOffsetsLength);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    rowOffsets = rowDup.slice();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    decodeFirst();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public Cell getKey() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (current.keyBuffer.hasArray()) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      return new KeyValue.KeyOnlyKeyValue(current.keyBuffer.array(),<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          current.keyBuffer.arrayOffset() + current.keyBuffer.position(),<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          current.keyLength);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    } else {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      byte[] key = new byte[current.keyLength];<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      ByteBufferUtils.copyFromBufferToArray(key, current.keyBuffer,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          current.keyBuffer.position(), 0, current.keyLength);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return new KeyValue.KeyOnlyKeyValue(key, 0, current.keyLength);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public ByteBuffer getValueShallowCopy() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    currentBuffer.asSubByteBuffer(current.valueOffset, current.valueLength,<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        tmpPair);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ByteBuffer dup = tmpPair.getFirst().duplicate();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    dup.position(tmpPair.getSecond());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    dup.limit(tmpPair.getSecond() + current.valueLength);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return dup.slice();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public Cell getCell() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return current.toCell();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public void rewind() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    currentBuffer.rewind();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    decodeFirst();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  public boolean next() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    if (!currentBuffer.hasRemaining()) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return false;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    decodeNext();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    previous.invalidate();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return true;<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>  private int binarySearch(Cell seekCell, boolean seekBefore) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    int low = 0;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    int high = rowNumber - 1;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int mid = (low + high) &gt;&gt;&gt; 1;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    int comp = 0;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    while (low &lt;= high) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      mid = (low + high) &gt;&gt;&gt; 1;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      ByteBuffer row = getRow(mid);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      comp = compareRows(row, seekCell);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (comp &lt; 0) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        low = mid + 1;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      } else if (comp &gt; 0) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        high = mid - 1;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      } else {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        // key found<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        if (seekBefore) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          return mid - 1;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        } else {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          return mid;<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>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    // key not found.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    if (comp &gt; 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      return mid - 1;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } else {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return mid;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private int compareRows(ByteBuffer row, Cell seekCell) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (seekCell instanceof ByteBufferedCell) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          ((ByteBufferedCell) seekCell).getRowByteBuffer(),<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          ((ByteBufferedCell) seekCell).getRowPosition(),<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          seekCell.getRowLength());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    } else {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          seekCell.getRowArray(), seekCell.getRowOffset(),<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          seekCell.getRowLength());<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><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  private ByteBuffer getRow(int index) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int offset = rowOffsets.getIntAfterPosition(index * Bytes.SIZEOF_INT);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    ByteBuff block = currentBuffer.duplicate();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    block.position(offset + Bytes.SIZEOF_LONG);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    short rowLen = block.getShort();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    block.asSubByteBuffer(block.position(), rowLen, tmpPair);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    ByteBuffer row = tmpPair.getFirst();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    row.position(tmpPair.getSecond()).limit(tmpPair.getSecond() + rowLen);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return row;<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>  @Override<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  public int seekToKeyInBlock(Cell seekCell, boolean seekBefore) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    previous.invalidate();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    int index = binarySearch(seekCell, seekBefore);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    if (index &lt; 0) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      return HConstants.INDEX_KEY_MAGIC; // using optimized index key<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    } else {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      int offset = rowOffsets.getIntAfterPosition(index * Bytes.SIZEOF_INT);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (offset != 0) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        decodeAtPosition(offset);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    do {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      int comp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      comp = comparator.compareKeyIgnoresMvcc(seekCell, current.currentKey);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      if (comp == 0) { // exact match<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        if (seekBefore) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          if (!previous.isValid()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            // The caller (seekBefore) has to ensure that we are not at the<a name="line.201"></a>
+<span class="sourceLineNo">202</span>            // first key in the block.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>            throw new IllegalStateException("Cannot seekBefore if "<a name="line.203"></a>
+<span class="sourceLineNo">204</span>                + "positioned at the first key in the block: key="<a name="line.204"></a>
+<span class="sourceLineNo">205</span>                + Bytes.toStringBinary(seekCell.getRowArray()));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          moveToPrevious();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          return 1;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        return 0;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (comp &lt; 0) { // already too large, check previous<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        if (previous.isValid()) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          moveToPrevious();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        } else {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          return HConstants.INDEX_KEY_MAGIC; // using optimized index key<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        return 1;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>      // move to next, if more data is available<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      if (currentBuffer.hasRemaining()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        previous.copyFromNext(current);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        decodeNext();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      } else {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        break;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } while (true);<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // we hit the end of the block, not an exact match<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    return 1;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  private void moveToPrevious() {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    if (!previous.isValid()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      throw new IllegalStateException("Can move back only once and not in first key in the block.");<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SeekerState tmp = previous;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    previous = current;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    current = tmp;<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // move after last key value<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    currentBuffer.position(current.nextKvOffset);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    previous.invalidate();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  @Override<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  public int compareKey(CellComparator comparator, Cell key) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    return comparator.compareKeyIgnoresMvcc(key, current.currentKey);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>  protected void decodeFirst() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    decodeNext();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    previous.invalidate();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  protected void decodeAtPosition(int position) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    currentBuffer.position(position);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    decodeNext();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    previous.invalidate();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void decodeNext() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    current.startOffset = currentBuffer.position();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    long ll = currentBuffer.getLongAfterPosition(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // Read top half as an int of key length and bottom int as value length<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    current.keyLength = (int) (ll &gt;&gt; Integer.SIZE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    current.valueLength = (int) (Bytes.MASK_FOR_LOWER_INT_IN_LONG ^ ll);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    currentBuffer.skip(Bytes.SIZEOF_LONG);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // key part<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    currentBuffer.asSubByteBuffer(currentBuffer.position(), current.keyLength,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        tmpPair);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    ByteBuffer key = tmpPair.getFirst().duplicate();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    key.position(tmpPair.getSecond()).limit(<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        tmpPair.getSecond() + current.keyLength);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    current.keyBuffer = key;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    currentBuffer.skip(current.keyLength);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // value part<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    current.valueOffset = currentBuffer.position();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    currentBuffer.skip(current.valueLength);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (includesTags()) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      decodeTags();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    if (includesMvcc()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    } else {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      current.memstoreTS = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    current.nextKvOffset = currentBuffer.position();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    current.currentKey.setKey(current.keyBuffer, tmpPair.getSecond(),<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        current.keyLength);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  protected boolean includesMvcc() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  protected boolean includesTags() {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  protected void decodeTags() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    current.tagsLength = currentBuffer.getShortAfterPosition(0);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    currentBuffer.skip(Bytes.SIZEOF_SHORT);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    current.tagsOffset = currentBuffer.position();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    currentBuffer.skip(current.tagsLength);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private class SeekerState {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>     * The size of a (key length, value length) tuple that prefixes each entry<a name="line.313"></a>
+<span class="sourceLineNo">314</span>     * in a data block.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>     */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public final static int KEY_VALUE_LEN_SIZE = 2 * Bytes.SIZEOF_INT;<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    protected ByteBuff currentBuffer;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected int startOffset = -1;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    protected int valueOffset = -1;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    protected int keyLength;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    protected int valueLength;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected int tagsLength = 0;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected int tagsOffset = -1;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    protected ByteBuffer keyBuffer = null;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    protected long memstoreTS;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected int nextKvOffset;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    // buffer backed keyonlyKV<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    private ByteBufferedKeyOnlyKeyValue currentKey = new ByteBufferedKeyOnlyKeyValue();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    protected boolean isValid() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return valueOffset != -1;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    protected void invalidate() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      valueOffset = -1;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      currentKey = new ByteBufferedKeyOnlyKeyValue();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      currentBuffer = null;<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>     * Copy the state from the next one into this instance (the previous state placeholder). Used to<a name="line.343"></a>
+<span class="sourceLineNo">344</span>     * save the previous state when we are advancing the seeker to the next key/value.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>     */<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      keyBuffer = nextState.keyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      currentKey.setKey(nextState.keyBuffer,<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          nextState.currentKey.getRowPosition() - Bytes.SIZEOF_SHORT,<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          nextState.keyLength);<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>      startOffset = nextState.startOffset;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      valueOffset = nextState.valueOffset;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      keyLength = nextState.keyLength;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      valueLength = nextState.valueLength;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      memstoreTS = nextState.memstoreTS;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      currentBuffer = nextState.currentBuffer;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      tagsOffset = nextState.tagsOffset;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      tagsLength = nextState.tagsLength;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>    @Override<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public String toString() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return CellUtil.getCellKeyAsString(toCell());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    protected int getCellBufSize() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      int kvBufSize = KEY_VALUE_LEN_SIZE + keyLength + valueLength;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      if (includesTags()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        kvBufSize += Bytes.SIZEOF_SHORT + tagsLength;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return kvBufSize;<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>    public Cell toCell() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      Cell ret;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      int cellBufSize = getCellBufSize();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      long seqId = 0l;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      if (includesMvcc()) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        seqId = memstoreTS;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      if (currentBuffer.hasArray()) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        // TODO : reduce the varieties of KV here. Check if based on a boolean<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        // we can handle the 'no tags' case.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (tagsLength &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          ret = new SizeCachedKeyValue(currentBuffer.array(),<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              currentBuffer.arrayOffset() + startOffset, cellBufSize, seqId);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        } else {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          ret = new SizeCachedNoTagsKeyValue(currentBuffer.array(),<a name="line.390"></a>
+<span class="sourceLineNo">391</span>              currentBuffer.arrayOffset() + startOffset, cellBufSize, seqId);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        currentBuffer.asSubByteBuffer(startOffset, cellBufSize, tmpPair);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        ByteBuffer buf = tmpPair.getFirst();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        if (buf.isDirect()) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          ret = new OffheapKeyValue(buf, tmpPair.getSecond(), cellBufSize,<a name="line.397"></a>
+<span class="sourceLineNo">398</span>              tagsLength &gt; 0, seqId);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        } else {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          if (tagsLength &gt; 0) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>            ret = new SizeCachedKeyValue(buf.array(), buf.arrayOffset()<a name="line.401"></a>
+<span class="sourceLineNo">402</span>                + tmpPair.getSecond(), cellBufSize, seqId);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          } else {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>            ret = new SizeCachedNoTagsKeyValue(buf.array(), buf.arrayOffset()<a name="line.404"></a>
+<span class="sourceLineNo">405</span>                + tmpPair.getSecond(), cellBufSize, seqId);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      return ret;<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><a name="line.412"></a>
+<span class="sourceLineNo">413</span>}<a name="line.413"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
new file mode 100644
index 0000000..c802bc4
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
@@ -0,0 +1,485 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with this<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * work for additional information regarding copyright ownership. The ASF<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * licenses this file to you under the Apache License, Version 2.0 (the<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * "License"); you may not use this file except in compliance with the License.<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * You may obtain a copy of the License at<a name="line.7"></a>
+<span class="sourceLineNo">008</span> *<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * License for the specific language governing permissions and limitations<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * under the License.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> */<a name="line.16"></a>
+<span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.nio.ByteBuffer;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.ByteBufferedKeyOnlyKeyValue;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.Cell;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HConstants;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.OffheapKeyValue;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.SizeCachedKeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.SizeCachedNoTagsKeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoder.EncodedSeeker;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.ObjectIntPair;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>@InterfaceAudience.Private<a name="line.38"></a>
+<span class="sourceLineNo">039</span>public class RowIndexSeekerV1 implements EncodedSeeker {<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private HFileBlockDecodingContext decodingCtx;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private final CellComparator comparator;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  // A temp pair object which will be reused by ByteBuff#asSubByteBuffer calls. This avoids too<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  // many object creations.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  protected final ObjectIntPair&lt;ByteBuffer&gt; tmpPair = new ObjectIntPair&lt;ByteBuffer&gt;();<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private ByteBuff currentBuffer;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private SeekerState current = new SeekerState(); // always valid<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private SeekerState previous = new SeekerState(); // may not be valid<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private int rowNumber;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private ByteBuff rowOffsets = null;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public RowIndexSeekerV1(CellComparator comparator,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    this.comparator = comparator;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    this.decodingCtx = decodingCtx;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setCurrentBuffer(ByteBuff buffer) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    int onDiskSize = buffer.getInt(buffer.limit() - Bytes.SIZEOF_INT);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    // Data part<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    ByteBuff dup = buffer.duplicate();<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    dup.position(buffer.position());<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    dup.limit(buffer.position() + onDiskSize);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    currentBuffer = dup.slice();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    current.currentBuffer = currentBuffer;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    buffer.skip(onDiskSize);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // Row offset<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    rowNumber = buffer.getInt();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    int totalRowOffsetsLength = Bytes.SIZEOF_INT * rowNumber;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    ByteBuff rowDup = buffer.duplicate();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    rowDup.position(buffer.position());<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    rowDup.limit(buffer.position() + totalRowOffsetsLength);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    rowOffsets = rowDup.slice();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    decodeFirst();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public Cell getKey() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (current.keyBuffer.hasArray()) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      return new KeyValue.KeyOnlyKeyValue(current.keyBuffer.array(),<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          current.keyBuffer.arrayOffset() + current.keyBuffer.position(),<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          current.keyLength);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    } else {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      byte[] key = new byte[current.keyLength];<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      ByteBufferUtils.copyFromBufferToArray(key, current.keyBuffer,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          current.keyBuffer.position(), 0, current.keyLength);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return new KeyValue.KeyOnlyKeyValue(key, 0, current.keyLength);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public ByteBuffer getValueShallowCopy() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    currentBuffer.asSubByteBuffer(current.valueOffset, current.valueLength,<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        tmpPair);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ByteBuffer dup = tmpPair.getFirst().duplicate();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    dup.position(tmpPair.getSecond());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    dup.limit(tmpPair.getSecond() + current.valueLength);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return dup.slice();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public Cell getCell() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return current.toCell();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public void rewind() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    currentBuffer.rewind();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    decodeFirst();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  public boolean next() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    if (!currentBuffer.hasRemaining()) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return false;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    decodeNext();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    previous.invalidate();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return true;<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>  private int binarySearch(Cell seekCell, boolean seekBefore) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    int low = 0;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    int high = rowNumber - 1;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int mid = (low + high) &gt;&gt;&gt; 1;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    int comp = 0;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    while (low &lt;= high) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      mid = (low + high) &gt;&gt;&gt; 1;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      ByteBuffer row = getRow(mid);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      comp = compareRows(row, seekCell);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (comp &lt; 0) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        low = mid + 1;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      } else if (comp &gt; 0) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        high = mid - 1;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      } else {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        // key found<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        if (seekBefore) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          return mid - 1;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        } else {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          return mid;<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>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    // key not found.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    if (comp &gt; 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      return mid - 1;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } else {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return mid;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private int compareRows(ByteBuffer row, Cell seekCell) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (seekCell instanceof ByteBufferedCell) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          ((ByteBufferedCell) seekCell).getRowByteBuffer(),<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          ((ByteBufferedCell) seekCell).getRowPosition(),<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          seekCell.getRowLength());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    } else {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          seekCell.getRowArray(), seekCell.getRowOffset(),<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          seekCell.getRowLength());<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><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  private ByteBuffer getRow(int index) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int offset = rowOffsets.getIntAfterPosition(index * Bytes.SIZEOF_INT);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    ByteBuff block = currentBuffer.duplicate();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    block.position(offset + Bytes.SIZEOF_LONG);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    short rowLen = block.getShort();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    block.asSubByteBuffer(block.position(), rowLen, tmpPair);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    ByteBuffer row = tmpPair.getFirst();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    row.position(tmpPair.getSecond()).limit(tmpPair.getSecond() + rowLen);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return row;<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>  @Override<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  public int seekToKeyInBlock(Cell seekCell, boolean seekBefore) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    previous.invalidate();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    int index = binarySearch(seekCell, seekBefore);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    if (index &lt; 0) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      return HConstants.INDEX_KEY_MAGIC; // using optimized index key<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    } else {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      int offset = rowOffsets.getIntAfterPosition(index * Bytes.SIZEOF_INT);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (offset != 0) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        decodeAtPosition(offset);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    do {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      int comp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      comp = comparator.compareKeyIgnoresMvcc(seekCell, current.currentKey);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      if (comp == 0) { // exact match<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        if (seekBefore) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          if (!previous.isValid()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            // The caller (seekBefore) has to ensure that we are not at the<a name="line.201"></a>
+<span class="sourceLineNo">202</span>            // first key in the block.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>            throw new IllegalStateException("Cannot seekBefore if "<a name="line.203"></a>
+<span class="sourceLineNo">204</span>                + "positioned at the first key in the block: key="<a name="line.204"></a>
+<span class="sourceLineNo">205</span>                + Bytes.toStringBinary(seekCell.getRowArray()));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          moveToPrevious();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          return 1;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        return 0;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (comp &lt; 0) { // already too large, check previous<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        if (previous.isValid()) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          moveToPrevious();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        } else {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          return HConstants.INDEX_KEY_MAGIC; // using optimized index key<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        return 1;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>      // move to next, if more data is available<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      if (currentBuffer.hasRemaining()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        previous.copyFromNext(current);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        decodeNext();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      } else {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        break;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } while (true);<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // we hit the end of the block, not an exact match<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    return 1;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  private void moveToPrevious() {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    if (!previous.isValid()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      throw new IllegalStateException("Can move back only once and not in first key in the block.");<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SeekerState tmp = previous;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    previous = current;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    current = tmp;<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // move after last key value<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    currentBuffer.position(current.nextKvOffset);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    previous.invalidate();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  @Override<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  public int compareKey(CellComparator comparator, Cell key) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    return comparator.compareKeyIgnoresMvcc(key, current.currentKey);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>  protected void decodeFirst() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    decodeNext();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    previous.invalidate();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  protected void decodeAtPosition(int position) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    currentBuffer.position(position);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    decodeNext();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    previous.invalidate();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void decodeNext() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    current.startOffset = currentBuffer.position();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    long ll = currentBuffer.getLongAfterPosition(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // Read top half as an int of key length and bottom int as value length<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    current.keyLength = (int) (ll &gt;&gt; Integer.SIZE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    current.valueLength = (int) (Bytes.MASK_FOR_LOWER_INT_IN_LONG ^ ll);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    currentBuffer.skip(Bytes.SIZEOF_LONG);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // key part<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    currentBuffer.asSubByteBuffer(currentBuffer.position(), current.keyLength,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        tmpPair);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    ByteBuffer key = tmpPair.getFirst().duplicate();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    key.position(tmpPair.getSecond()).limit(<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        tmpPair.getSecond() + current.keyLength);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    current.keyBuffer = key;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    currentBuffer.skip(current.keyLength);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // value part<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    current.valueOffset = currentBuffer.position();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    currentBuffer.skip(current.valueLength);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (includesTags()) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      decodeTags();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    if (includesMvcc()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    } else {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      current.memstoreTS = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    current.nextKvOffset = currentBuffer.position();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    current.currentKey.setKey(current.keyBuffer, tmpPair.getSecond(),<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        current.keyLength);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  protected boolean includesMvcc() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  protected boolean includesTags() {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return this.decodingCtx.getHFileContext().isIncludesTags();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  protected void decodeTags() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    current.tagsLength = currentBuffer.getShortAfterPosition(0);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    currentBuffer.skip(Bytes.SIZEOF_SHORT);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    current.tagsOffset = currentBuffer.position();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    currentBuffer.skip(current.tagsLength);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private class SeekerState {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>     * The size of a (key length, value length) tuple that prefixes each entry<a name="line.313"></a>
+<span class="sourceLineNo">314</span>     * in a data block.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>     */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public final static int KEY_VALUE_LEN_SIZE = 2 * Bytes.SIZEOF_INT;<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    protected ByteBuff currentBuffer;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    protected int startOffset = -1;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    protected int valueOffset = -1;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    protected int keyLength;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    protected int valueLength;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected int tagsLength = 0;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected int tagsOffset = -1;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    protected ByteBuffer keyBuffer = null;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    protected long memstoreTS;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected int nextKvOffset;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    // buffer backed keyonlyKV<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    private ByteBufferedKeyOnlyKeyValue currentKey = new ByteBufferedKeyOnlyKeyValue();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    protected boolean isValid() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return valueOffset != -1;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    protected void invalidate() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      valueOffset = -1;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      currentKey = new ByteBufferedKeyOnlyKeyValue();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      currentBuffer = null;<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>     * Copy the state from the next one into this instance (the previous state placeholder). Used to<a name="line.343"></a>
+<span class="sourceLineNo">344</span>     * save the previous state when we are advancing the seeker to the next key/value.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>     */<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    protected void copyFromNext(SeekerState nextState) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      keyBuffer = nextState.keyBuffer;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      currentKey.setKey(nextState.keyBuffer,<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          nextState.currentKey.getRowPosition() - Bytes.SIZEOF_SHORT,<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          nextState.keyLength);<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>      startOffset = nextState.startOffset;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      valueOffset = nextState.valueOffset;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      keyLength = nextState.keyLength;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      valueLength = nextState.valueLength;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      nextKvOffset = nextState.nextKvOffset;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      memstoreTS = nextState.memstoreTS;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      currentBuffer = nextState.currentBuffer;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      tagsOffset = nextState.tagsOffset;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      tagsLength = nextState.tagsLength;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>    @Override<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public String toString() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return CellUtil.getCellKeyAsString(toCell());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    protected int getCellBufSize() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      int kvBufSize = KEY_VALUE_LEN_SIZE + keyLength + valueLength;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      if (includesTags()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        kvBufSize += Bytes.SIZEOF_SHORT + tagsLength;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return kvBufSize;<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>    public Cell toCell() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      Cell ret;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      int cellBufSize = getCellBufSize();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      long seqId = 0l;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      if (includesMvcc()) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        seqId = memstoreTS;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      if (currentBuffer.hasArray()) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        // TODO : reduce the varieties of KV here. Check if based on a boolean<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        // we can handle the 'no tags' case.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (tagsLength &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          ret = new SizeCachedKeyValue(currentBuffer.array(),<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              currentBuffer.arrayOffset() + startOffset, cellBufSize, seqId);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        } else {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          ret = new SizeCachedNoTagsKeyValue(currentBuffer.array(),<a name="line.390"></a>
+<span class="sourceLineNo">391</span>              currentBuffer.arrayOffset() + startOffset, cellBufSize, seqId);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        currentBuffer.asSubByteBuffer(startOffset, cellBufSize, tmpPair);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        ByteBuffer buf = tmpPair.getFirst();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        if (buf.isDirect()) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          ret = new OffheapKeyValue(buf, tmpPair.getSecond(), cellBufSize,<a name="line.397"></a>
+<span class="sourceLineNo">398</span>              tagsLength &gt; 0, seqId);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        } else {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          if (tagsLength &gt; 0) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>            ret = new SizeCachedKeyValue(buf.array(), buf.arrayOffset()<a name="line.401"></a>
+<span class="sourceLineNo">402</span>                + tmpPair.getSecond(), cellBufSize, seqId);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          } else {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>            ret = new SizeCachedNoTagsKeyValue(buf.array(), buf.arrayOffset()<a name="line.404"></a>
+<span class="sourceLineNo">405</span>                + tmpPair.getSecond(), cellBufSize, seqId);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      return ret;<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><a name="line.412"></a>
+<span class="sourceLineNo">413</span>}<a name="line.413"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
index 65422ba..176c212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
@@ -88,7 +88,7 @@
 <span class="sourceLineNo">080</span>  static int versions = -1;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>  static String tableName = null;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>  static String families = null;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static String delimiter = null;<a name="line.83"></a>
+<span class="sourceLineNo">083</span>  static String delimiter = "";<a name="line.83"></a>
 <span class="sourceLineNo">084</span>  static String peerId = null;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>  static String rowPrefixes = null;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
index 65422ba..176c212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
@@ -88,7 +88,7 @@
 <span class="sourceLineNo">080</span>  static int versions = -1;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>  static String tableName = null;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>  static String families = null;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static String delimiter = null;<a name="line.83"></a>
+<span class="sourceLineNo">083</span>  static String delimiter = "";<a name="line.83"></a>
 <span class="sourceLineNo">084</span>  static String peerId = null;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>  static String rowPrefixes = null;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
index 65422ba..176c212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
@@ -88,7 +88,7 @@
 <span class="sourceLineNo">080</span>  static int versions = -1;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>  static String tableName = null;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>  static String families = null;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static String delimiter = null;<a name="line.83"></a>
+<span class="sourceLineNo">083</span>  static String delimiter = "";<a name="line.83"></a>
 <span class="sourceLineNo">084</span>  static String peerId = null;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>  static String rowPrefixes = null;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>


[02/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 4d08f6f..34bc830 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -1471,2010 +1471,2015 @@
 <span class="sourceLineNo">1463</span>        this, this.regionServerAccounting);<a name="line.1463"></a>
 <span class="sourceLineNo">1464</span>    if (this.hMemManager != null) {<a name="line.1464"></a>
 <span class="sourceLineNo">1465</span>      this.hMemManager.start(getChoreService());<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    }<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>  }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper,<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      getMyEphemeralNodePath(), data);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>  }<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span><a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  @Override<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    return regionServerAccounting;<a name="line.1484"></a>
+<span class="sourceLineNo">1466</span>      MemStoreChunkPool chunkPool = MemStoreChunkPool.getPool(this.conf);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      if (chunkPool != null) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>        // Register it as HeapMemoryTuneObserver<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>        this.hMemManager.registerTuneObserver(chunkPool);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      }<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>    }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span><a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper,<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      getMyEphemeralNodePath(), data);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>  }<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span><a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1484"></a>
 <span class="sourceLineNo">1485</span>  }<a name="line.1485"></a>
 <span class="sourceLineNo">1486</span><a name="line.1486"></a>
 <span class="sourceLineNo">1487</span>  @Override<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>  public TableLockManager getTableLockManager() {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    return tableLockManager;<a name="line.1489"></a>
+<span class="sourceLineNo">1488</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    return regionServerAccounting;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>  }<a name="line.1490"></a>
 <span class="sourceLineNo">1491</span><a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>  /*<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   * @param r Region to get RegionLoad for.<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   * @return RegionLoad instance.<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   * @throws IOException<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private RegionLoad createRegionLoad(final Region r, RegionLoad.Builder regionLoadBldr,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    int stores = 0;<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>    int storefiles = 0;<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    int storeUncompressedSizeMB = 0;<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    int storefileSizeMB = 0;<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    int memstoreSizeMB = (int) (r.getMemstoreSize() / 1024 / 1024);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    int storefileIndexSizeMB = 0;<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    int rootIndexSizeKB = 0;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    int totalStaticIndexSizeKB = 0;<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    int totalStaticBloomSizeKB = 0;<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    long totalCompactingKVs = 0;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    long currentCompactedKVs = 0;<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    List&lt;Store&gt; storeList = r.getStores();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    stores += storeList.size();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    for (Store store : storeList) {<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      storefiles += store.getStorefilesCount();<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      storefileIndexSizeMB += (int) (store.getStorefilesIndexSize() / 1024 / 1024);<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      if (progress != null) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        totalCompactingKVs += progress.totalCompactingKVs;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      rootIndexSizeKB += (int) (store.getStorefilesIndexSize() / 1024);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    if (regionLoadBldr == null) {<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    }<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    if (regionSpecifier == null) {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    regionSpecifier.setValue(ByteStringer.wrap(name));<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      .setStores(stores)<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      .setStorefiles(storefiles)<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      .setMemstoreSizeMB(memstoreSizeMB)<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      .setStorefileIndexSizeMB(storefileIndexSizeMB)<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>      .setRootIndexSizeKB(rootIndexSizeKB)<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      .setDataLocality(dataLocality)<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    ((HRegion)r).setCompleteSequenceId(regionLoadBldr);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span><a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    return regionLoadBldr.build();<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>  }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span><a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  /**<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>   * @param encodedRegionName<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>   * @return An instance of RegionLoad.<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>   */<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    Region r = onlineRegions.get(encodedRegionName);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  /*<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>   */<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>    private final HRegionServer instance;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    private final int majorCompactPriority;<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    private long iteration = 0;<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span><a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    CompactionChecker(final HRegionServer h, final int sleepTime,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>        final Stoppable stopper) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.instance = h;<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      LOG.info(this.getName() + " runs every " + StringUtils.formatTime(sleepTime));<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span><a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      /* MajorCompactPriority is configurable.<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>       * If not set, the compaction will use default priority.<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>       */<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        DEFAULT_PRIORITY);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    }<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span><a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    @Override<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    protected void chore() {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        if (r == null)<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          continue;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        for (Store s : r.getStores()) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>          try {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>            assert multiplier &gt; 0;<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>            if (iteration % multiplier != 0) continue;<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>            if (s.needsCompaction()) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>              this.instance.compactSplitThread.requestSystemCompaction(r, s, getName()<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>                  + " requests compaction");<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>            } else if (s.isMajorCompaction()) {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>              if (majorCompactPriority == DEFAULT_PRIORITY<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>                  || majorCompactPriority &gt; ((HRegion)r).getCompactPriority()) {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>                    + " requests major compaction; use default priority", null);<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>              } else {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>                    + " requests major compaction; use configured priority",<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>                  this.majorCompactPriority, null, null);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>              }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>            }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>          } catch (IOException e) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>            LOG.warn("Failed major compaction check on " + r, e);<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>      }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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><a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  static class PeriodicMemstoreFlusher extends ScheduledChore {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    final HRegionServer server;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      this.server = server;<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    }<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span><a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    @Override<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    protected void chore() {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      final StringBuffer whyFlush = new StringBuffer();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      for (Region r : this.server.onlineRegions.values()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        if (r == null) continue;<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        if (((HRegion)r).shouldFlush(whyFlush)) {<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>          if (requester != null) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>            long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>            LOG.info(getName() + " requesting flush of " +<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>              r.getRegionInfo().getRegionNameAsString() + " because " +<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>              whyFlush.toString() +<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>              " after random delay " + randomDelay + "ms");<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>            requester.requestDelayedFlush(r, randomDelay, false);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>          }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>        }<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  /**<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>   * completed (setting up filesystem, starting service threads, etc.). This<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>   * method is designed mostly to be useful in tests.<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>   *<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>   * @return true if online, false if not.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   */<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>  public boolean isOnline() {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>    return online.get();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>  }<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span><a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /**<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>   * Setup WAL log and replication if enabled.<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>   * Replication setup is done in here because it wants to be hooked up to WAL.<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>   * @return A WAL instance.<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>   * @throws IOException<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>   */<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  private WALFactory setupWALAndReplication() throws IOException {<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    final Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    final String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span><a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    Path logdir = new Path(rootDir, logName);<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    if (LOG.isDebugEnabled()) LOG.debug("logdir=" + logdir);<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    if (this.fs.exists(logdir)) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      throw new RegionServerRunningException("Region server has already " +<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>        "created directory at " + this.serverName.toString());<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    }<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span><a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    // Instantiate replication manager if replication enabled.  Pass it the<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    // log directories.<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>    createNewReplicationInstance(conf, this, this.fs, logdir, oldLogDir);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span><a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    // listeners the wal factory will add to wals it creates.<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    final List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;WALActionsListener&gt;();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    listeners.add(new MetricsWAL());<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        this.replicationSourceHandler.getWALActionsListener() != null) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      // Replication handler is an implementation of WALActionsListener.<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      listeners.add(this.replicationSourceHandler.getWALActionsListener());<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>    }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>    return new WALFactory(conf, listeners, serverName.toString());<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span><a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  /**<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>   * We initialize the roller for the wal that handles meta lazily<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>   * since we don't know if this regionserver will handle it. All calls to<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>   * this method return a reference to the that same roller. As newly referenced<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>   * meta regions are brought online, they will be offered to the roller for maintenance.<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>   * As a part of that registration process, the roller will add itself as a<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>   * listener on the wal.<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>   */<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>  protected LogRoller ensureMetaWALRoller() {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // Using a tmp log roller to ensure metaLogRoller is alive once it is not<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // null<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    LogRoller roller = metawalRoller.get();<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    if (null == roller) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>      LogRoller tmpLogRoller = new LogRoller(this, this);<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      String n = Thread.currentThread().getName();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      Threads.setDaemonThreadRunning(tmpLogRoller.getThread(),<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>          n + "-MetaLogRoller", uncaughtExceptionHandler);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      if (metawalRoller.compareAndSet(null, tmpLogRoller)) {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        roller = tmpLogRoller;<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      } else {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>        // Another thread won starting the roller<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>        Threads.shutdown(tmpLogRoller.getThread());<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        roller = metawalRoller.get();<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      }<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    return roller;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public MetricsRegionServer getRegionServerMetrics() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return this.metricsRegionServer;<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * @return Master address tracker instance.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    return this.masterAddressTracker;<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>  /*<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>   * hosting server. Worker logs the exception and exits.<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>   */<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  private void startServiceThreads() throws IOException {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    // Start executor services<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      this.service.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    }<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    this.service.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>       "hbase.regionserver.wal.max.splitters", SplitLogWorkerCoordination.DEFAULT_MAX_SPLITTERS));<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    // Start the threads for compacted files discharger<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    this.service.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      this.service.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    Threads.setDaemonThreadRunning(this.walRoller.getThread(), getName() + ".logRoller",<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>        uncaughtExceptionHandler);<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    if (this.compactionChecker != null) choreService.scheduleChore(compactionChecker);<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    if (this.periodicFlusher != null) choreService.scheduleChore(periodicFlusher);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    if (this.healthCheckChore != null) choreService.scheduleChore(healthCheckChore);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    if (this.nonceManagerChore != null) choreService.scheduleChore(nonceManagerChore);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    if (this.storefileRefresher != null) choreService.scheduleChore(storefileRefresher);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    if (this.movedRegionsCleaner != null) choreService.scheduleChore(movedRegionsCleaner);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    // an unhandled exception, it will just exit.<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    Threads.setDaemonThreadRunning(this.leases.getThread(), getName() + ".leaseChecker",<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      uncaughtExceptionHandler);<a name="line.1798"></a>
+<span class="sourceLineNo">1492</span>  @Override<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  public TableLockManager getTableLockManager() {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    return tableLockManager;<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>  /*<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>   * @param r Region to get RegionLoad for.<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>   * @return RegionLoad instance.<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>   *<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   * @throws IOException<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   */<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>  private RegionLoad createRegionLoad(final Region r, RegionLoad.Builder regionLoadBldr,<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    int stores = 0;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>    int storefiles = 0;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    int storeUncompressedSizeMB = 0;<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    int storefileSizeMB = 0;<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    int memstoreSizeMB = (int) (r.getMemstoreSize() / 1024 / 1024);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    int storefileIndexSizeMB = 0;<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    int rootIndexSizeKB = 0;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    int totalStaticIndexSizeKB = 0;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    int totalStaticBloomSizeKB = 0;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    long totalCompactingKVs = 0;<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    long currentCompactedKVs = 0;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    List&lt;Store&gt; storeList = r.getStores();<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    stores += storeList.size();<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    for (Store store : storeList) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      storefiles += store.getStorefilesCount();<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      storefileIndexSizeMB += (int) (store.getStorefilesIndexSize() / 1024 / 1024);<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      if (progress != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        totalCompactingKVs += progress.totalCompactingKVs;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>      }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      rootIndexSizeKB += (int) (store.getStorefilesIndexSize() / 1024);<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    if (regionLoadBldr == null) {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    }<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    if (regionSpecifier == null) {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>    }<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    regionSpecifier.setValue(ByteStringer.wrap(name));<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      .setStores(stores)<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      .setStorefiles(storefiles)<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>      .setMemstoreSizeMB(memstoreSizeMB)<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      .setStorefileIndexSizeMB(storefileIndexSizeMB)<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      .setRootIndexSizeKB(rootIndexSizeKB)<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>      .setDataLocality(dataLocality)<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    ((HRegion)r).setCompleteSequenceId(regionLoadBldr);<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    return regionLoadBldr.build();<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  }<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span><a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  /**<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>   * @param encodedRegionName<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>   * @return An instance of RegionLoad.<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>   */<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    Region r = onlineRegions.get(encodedRegionName);<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>  /*<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>   */<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    private final HRegionServer instance;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>    private final int majorCompactPriority;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    private long iteration = 0;<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    CompactionChecker(final HRegionServer h, final int sleepTime,<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>        final Stoppable stopper) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      this.instance = h;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      LOG.info(this.getName() + " runs every " + StringUtils.formatTime(sleepTime));<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      /* MajorCompactPriority is configurable.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>       * If not set, the compaction will use default priority.<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>       */<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>        getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        DEFAULT_PRIORITY);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    }<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    @Override<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    protected void chore() {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>        if (r == null)<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>          continue;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (Store s : r.getStores()) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          try {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>            assert multiplier &gt; 0;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>            if (iteration % multiplier != 0) continue;<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>            if (s.needsCompaction()) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>              this.instance.compactSplitThread.requestSystemCompaction(r, s, getName()<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>                  + " requests compaction");<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>            } else if (s.isMajorCompaction()) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>              if (majorCompactPriority == DEFAULT_PRIORITY<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>                  || majorCompactPriority &gt; ((HRegion)r).getCompactPriority()) {<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>                    + " requests major compaction; use default priority", null);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>              } else {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>                this.instance.compactSplitThread.requestCompaction(r, s, getName()<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>                    + " requests major compaction; use configured priority",<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>                  this.majorCompactPriority, null, null);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>              }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>            }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>          } catch (IOException e) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>          }<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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><a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>  static class PeriodicMemstoreFlusher extends ScheduledChore {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    final HRegionServer server;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>    final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      this.server = server;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span><a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    @Override<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    protected void chore() {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      final StringBuffer whyFlush = new StringBuffer();<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      for (Region r : this.server.onlineRegions.values()) {<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        if (r == null) continue;<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>        if (((HRegion)r).shouldFlush(whyFlush)) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          if (requester != null) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>            long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME;<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>            LOG.info(getName() + " requesting flush of " +<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>              r.getRegionInfo().getRegionNameAsString() + " because " +<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>              whyFlush.toString() +<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>              " after random delay " + randomDelay + "ms");<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>            requester.requestDelayedFlush(r, randomDelay, false);<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>          }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>        }<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      }<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>   * completed (setting up filesystem, starting service threads, etc.). This<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>   * method is designed mostly to be useful in tests.<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   *<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   * @return true if online, false if not.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>   */<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>  public boolean isOnline() {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    return online.get();<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span><a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  /**<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>   * Setup WAL log and replication if enabled.<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>   * Replication setup is done in here because it wants to be hooked up to WAL.<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @return A WAL instance.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @throws IOException<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>  private WALFactory setupWALAndReplication() throws IOException {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    final Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>    final String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    Path logdir = new Path(rootDir, logName);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    if (LOG.isDebugEnabled()) LOG.debug("logdir=" + logdir);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    if (this.fs.exists(logdir)) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      throw new RegionServerRunningException("Region server has already " +<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>        "created directory at " + this.serverName.toString());<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span><a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    // Instantiate replication manager if replication enabled.  Pass it the<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    // log directories.<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    createNewReplicationInstance(conf, this, this.fs, logdir, oldLogDir);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span><a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    // listeners the wal factory will add to wals it creates.<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    final List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;WALActionsListener&gt;();<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    listeners.add(new MetricsWAL());<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>        this.replicationSourceHandler.getWALActionsListener() != null) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      // Replication handler is an implementation of WALActionsListener.<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      listeners.add(this.replicationSourceHandler.getWALActionsListener());<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    }<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span><a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    return new WALFactory(conf, listeners, serverName.toString());<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  /**<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>   * We initialize the roller for the wal that handles meta lazily<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>   * since we don't know if this regionserver will handle it. All calls to<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>   * this method return a reference to the that same roller. As newly referenced<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>   * meta regions are brought online, they will be offered to the roller for maintenance.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>   * As a part of that registration process, the roller will add itself as a<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>   * listener on the wal.<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>   */<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>  protected LogRoller ensureMetaWALRoller() {<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // Using a tmp log roller to ensure metaLogRoller is alive once it is not<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    // null<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    LogRoller roller = metawalRoller.get();<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    if (null == roller) {<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LogRoller tmpLogRoller = new LogRoller(this, this);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>      String n = Thread.currentThread().getName();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      Threads.setDaemonThreadRunning(tmpLogRoller.getThread(),<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          n + "-MetaLogRoller", uncaughtExceptionHandler);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      if (metawalRoller.compareAndSet(null, tmpLogRoller)) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        roller = tmpLogRoller;<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>      } else {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        // Another thread won starting the roller<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>        Threads.shutdown(tmpLogRoller.getThread());<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>        roller = metawalRoller.get();<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    return roller;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>  public MetricsRegionServer getRegionServerMetrics() {<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    return this.metricsRegionServer;<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  /**<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>   * @return Master address tracker instance.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>   */<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>    return this.masterAddressTracker;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>  }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>  /*<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>   * hosting server. Worker logs the exception and exits.<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>   */<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  private void startServiceThreads() throws IOException {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    // Start executor services<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    this.service.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    this.service.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>      conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      this.service.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    }<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    this.service.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>       "hbase.regionserver.wal.max.splitters", SplitLogWorkerCoordination.DEFAULT_MAX_SPLITTERS));<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // Start the threads for compacted files discharger<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    this.service.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>      this.service.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    }<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span><a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    Threads.setDaemonThreadRunning(this.walRoller.getThread(), getName() + ".logRoller",<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        uncaughtExceptionHandler);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    if (this.compactionChecker != null) choreService.scheduleChore(compactionChecker);<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    if (this.periodicFlusher != null) choreService.scheduleChore(periodicFlusher);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    if (this.healthCheckChore != null) choreService.scheduleChore(healthCheckChore);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    if (this.nonceManagerChore != null) choreService.scheduleChore(nonceManagerChore);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    if (this.storefileRefresher != null) choreService.scheduleChore(storefileRefresher);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    if (this.movedRegionsCleaner != null) choreService.scheduleChore(movedRegionsCleaner);<a name="line.1798"></a>
 <span class="sourceLineNo">1799</span><a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        this.replicationSourceHandler != null) {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    } else {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      if (this.replicationSourceHandler != null) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      if (this.replicationSinkHandler != null) {<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>      }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    }<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span><a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    // Create the log splitting worker and start it<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>    sinkConf.setInt("hbase.client.serverside.retries.multiplier", 1);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>    this.splitLogWorker = new SplitLogWorker(this, sinkConf, this, this, walFactory);<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>    splitLogWorker.start();<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span><a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>  /**<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>   * Puts up the webui.<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>   * @return Returns final port -- maybe different from what we started with.<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>   * @throws IOException<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>   */<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>  private int putUpWebUI() throws IOException {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    if(this instanceof HMaster) {<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // -1 is for disabling info server<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    if (port &lt; 0) return port;<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span><a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      String msg =<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Failed to start http info server. Address " + addr<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>              + "hbase.regionserver.info.bindAddress";<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      LOG.error(msg);<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>      throw new IOException(msg);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    // check if auto port bind enabled<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>        false);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    while (true) {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      try {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        infoServer.addServlet("dump", "/dump", getDumpServlet());<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        configureInfoServer();<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        this.infoServer.start();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>        break;<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      } catch (BindException e) {<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        if (!auto) {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          // auto bind disabled throw BindException<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>          throw e;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        }<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        // auto bind enabled, try to use another port<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        port++;<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    port = this.infoServer.getPort();<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    return port;<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  /*<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   * Verify that server is healthy<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   */<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  private boolean isHealthy() {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    if (!fsOk) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      // File system problem<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    // Verify that all threads are alive<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    if (!(leases.isAlive()<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        &amp;&amp; cacheFlusher.isAlive() &amp;&amp; walRoller.isAlive()<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        &amp;&amp; this.compactionChecker.isScheduled()<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        &amp;&amp; this.periodicFlusher.isScheduled())) {<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      stop("One or more threads are no longer alive -- stop");<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      return false;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    final LogRoller metawalRoller = this.metawalRoller.get();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    if (metawalRoller != null &amp;&amp; !metawalRoller.isAlive()) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      stop("Meta WAL roller thread is no longer alive -- stop");<a name="line.1900"></a>
+<span class="sourceLineNo">1800</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    // an unhandled exception, it will just exit.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    Threads.setDaemonThreadRunning(this.leases.getThread(), getName() + ".leaseChecker",<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      uncaughtExceptionHandler);<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        this.replicationSourceHandler != null) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    } else {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      if (this.replicationSourceHandler != null) {<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      }<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      if (this.replicationSinkHandler != null) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    // Create the log splitting worker and start it<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sinkConf.setInt("hbase.client.serverside.retries.multiplier", 1);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    this.splitLogWorker = new SplitLogWorker(this, sinkConf, this, this, walFactory);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>    splitLogWorker.start();<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>  /**<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>   * Puts up the webui.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>   * @return Returns final port -- maybe different from what we started with.<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>   * @throws IOException<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>   */<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>  private int putUpWebUI() throws IOException {<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>    if(this instanceof HMaster) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    // -1 is for disabling info server<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    if (port &lt; 0) return port;<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      String msg =<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Failed to start http info server. Address " + addr<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              + "hbase.regionserver.info.bindAddress";<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>      LOG.error(msg);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>      throw new IOException(msg);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>    // check if auto port bind enabled<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        false);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>    while (true) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      try {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        infoServer.addServlet("dump", "/dump", getDumpServlet());<a n

<TRUNCATED>

[14/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index 32277da..2b5c301 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -43,2833 +43,2836 @@
 <span class="sourceLineNo">035</span>import java.util.Collection;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.Collections;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import java.util.Comparator;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Iterator;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.Map;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Map.Entry;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.Set;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CountDownLatch;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.TimeUnit;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.regex.Pattern;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>import javax.servlet.ServletException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import javax.servlet.http.HttpServlet;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import javax.servlet.http.HttpServletRequest;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import javax.servlet.http.HttpServletResponse;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.commons.logging.Log;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.commons.logging.LogFactory;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.conf.Configuration;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CoordinatedStateException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HConstants;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.ProcedureInfo;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.RegionStateListener;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerLoad;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Result;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.coprocessor.BypassCoprocessorException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationMetaCleaner;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationZKLockCleanerChore;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.procedure.DeleteColumnFamilyProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.procedure.DispatchMergingRegionsProcedure;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.ProcedureEvent;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.procedure.ModifyColumnFamilyProcedure;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.replication.ReplicationQueuesZKImpl;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.replication.master.TableCFsUpdater;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.replication.regionserver.Replication;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.util.ZKDataMigrator;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.zookeeper.DrainingServerTracker;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.zookeeper.MasterMaintenanceModeTracker;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.zookeeper.RegionServerTracker;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.zookeeper.KeeperException;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.mortbay.jetty.Connector;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.mortbay.jetty.nio.SelectChannelConnector;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.mortbay.jetty.servlet.Context;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * run the cluster.  All others park themselves in their constructor until<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> *<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> *<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> *<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @see org.apache.zookeeper.Watcher<a name="line.191"></a>
-<span class="sourceLineNo">192</span> */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@SuppressWarnings("deprecation")<a name="line.194"></a>
-<span class="sourceLineNo">195</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  private static final Log LOG = LogFactory.getLog(HMaster.class.getName());<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static class InitializationMonitor extends HasThread {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * true, do nothing otherwise.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public static final boolean HALT_DEFAULT = false;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private final HMaster master;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private final long timeout;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private final boolean haltOnTimeout;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    InitializationMonitor(HMaster master) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      super("MasterInitializationMonitor");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      this.master = master;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      this.setDaemon(true);<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>    @Override<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    public void run() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          Thread.sleep(timeout);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          if (master.isInitialized()) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            if (haltOnTimeout) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  //instance into web context.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public static final String MASTER = "master";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  // Manager and zk listener for master election<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private final ActiveMasterManager activeMasterManager;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  // Region server tracker<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  RegionServerTracker regionServerTracker;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  // Draining region server tracker<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private DrainingServerTracker drainingServerTracker;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  // Tracker for load balancer state<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  // Tracker for split and merge state<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  // Tracker for region normalizer state<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  //Tracker for master maintenance mode setting<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private ClusterSchemaService clusterSchemaService;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  // Metrics for the HMaster<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  final MetricsMaster metricsMaster;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // file system manager for the master FS operations<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private MasterFileSystem fileSystemManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  private MasterWalManager walManager;<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // server manager to deal with region server info<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private volatile ServerManager serverManager;<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // manager of assignment nodes in zookeeper<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private AssignmentManager assignmentManager;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  // buffer for "fatal error" notices from region servers<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  // in the cluster. This is only used for assisting<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // operations/debugging.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  // flag set after we become the active master (used for testing)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private volatile boolean isActiveMaster = false;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  // flag set after we complete initialization once active,<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  // it is not private since it's used in unit tests<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  // flag set after master services are started,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  // initialization may have not completed yet.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  volatile boolean serviceStarted = false;<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  // flag set after we complete assignMeta.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private final ProcedureEvent serverCrashProcessingEnabled =<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    new ProcedureEvent("server crash processing");<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  private LoadBalancer balancer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  private RegionNormalizer normalizer;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private BalancerChore balancerChore;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private RegionNormalizerChore normalizerChore;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private ClusterStatusChore clusterStatusChore;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private PeriodicDoMetrics periodicDoMetricsChore = null;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  CatalogJanitor catalogJanitorChore;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private ReplicationZKLockCleanerChore replicationZKLockCleanerChore;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  private ReplicationMetaCleaner replicationMetaCleaner;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private LogCleaner logCleaner;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private HFileCleaner hfileCleaner;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private MobCompactionChore mobCompactChore;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // used to synchronize the mobCompactionStates<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  // save the information of mob compactions in tables.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  MasterCoprocessorHost cpHost;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private final boolean preLoadTableDescriptors;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Time stamps for when a hmaster became active<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private long masterActiveTime;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final boolean masterCheckCompression;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  //should we check encryption settings at master side, default true<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private final boolean masterCheckEncryption;<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // monitor for snapshot of hbase tables<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  SnapshotManager snapshotManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // monitor for distributed procedures<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private MasterProcedureManagerHost mpmHost;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private volatile MasterQuotaManager quotaManager;<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private WALProcedureStore procedureStore;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // handle table states<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private TableStateManager tableStateManager;<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private long splitPlanCount;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  private long mergePlanCount;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  /** flag used in test cases in order to simulate RS failures during master initialization */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private volatile boolean initializationBeforeMetaAssignment = false;<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private org.mortbay.jetty.Server masterJettyServer;<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static class RedirectServlet extends HttpServlet {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    private static final long serialVersionUID = 2894774810058302472L;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    private static int regionServerInfoPort;<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public void doGet(HttpServletRequest request,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      String redirectUrl = request.getScheme() + "://"<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        + request.getServerName() + ":" + regionServerInfoPort<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        + request.getRequestURI();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      response.sendRedirect(redirectUrl);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private static class PeriodicDoMetrics extends ScheduledChore {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private final HMaster server;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    public PeriodicDoMetrics(int doMetricsInterval, final HMaster server) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      super(server.getServerName() + "-DoMetricsChore", server, doMetricsInterval);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      this.server = server;<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>    @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    protected void chore() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      server.doMetrics();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Initializes the HMaster. The steps are as follows:<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * &lt;p&gt;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;ol&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * &lt;li&gt;Initialize the local HRegionServer<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;li&gt;Start the ActiveMasterManager.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;/ol&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * &lt;p&gt;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Remaining steps of initialization occur in<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * the master becomes the active one.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public HMaster(final Configuration conf, CoordinatedStateManager csm)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      throws IOException, KeeperException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    super(conf, csm);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      conf.getLong("hbase.master.buffer.for.rs.fatals", 1*1024*1024));<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    LOG.info("hbase.rootdir=" + FSUtils.getRootDir(this.conf) +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Disable usage of meta replicas in the master<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    Replication.decorateMasterConfiguration(this.conf);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // Hack! Maps DFSClient =&gt; Master for logs.  HDFS made this<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    // config param for task trackers, but we can piggyback off of it.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // should we check encryption settings at master side, default true<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // preload table descriptor at startup<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // Do we publish the status?<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Class&lt;? extends ClusterStatusPublisher.Publisher&gt; publisherClass =<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            ClusterStatusPublisher.Publisher.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (shouldPublish) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (publisherClass == null) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.448"></a>
-<span class="sourceLineNo">449</span>            " is not set - not publishing status");<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      } else {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        getChoreService().scheduleChore(clusterStatusPublisherChore);<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><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      setInitLatch(new CountDownLatch(1));<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      int infoPort = putUpJettyServer();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      startActiveMasterManager(infoPort);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      activeMasterManager = 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><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // return the actual infoPort, -1 means disable info server.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private int putUpJettyServer() throws IOException {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return -1;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    // -1 is for disabling info server, so no redirecting<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    if (infoPort &lt; 0 || infoServer == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      return -1;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String msg =<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          "Failed to start redirecting jetty server. Address " + addr<a name="line.481"></a>
-<span class="sourceLineNo">482</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.482"></a>
-<span class="sourceLineNo">483</span>              + "hbase.master.info.bindAddress";<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      LOG.error(msg);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new IOException(msg);<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>    RedirectServlet.regionServerInfoPort = infoServer.getPort();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if(RedirectServlet.regionServerInfoPort == infoPort) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      return infoPort;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    masterJettyServer = new org.mortbay.jetty.Server();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    Connector connector = new SelectChannelConnector();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    connector.setHost(addr);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    connector.setPort(infoPort);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    masterJettyServer.addConnector(connector);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    masterJettyServer.setStopAtShutdown(true);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Context context = new Context(masterJettyServer, "/", Context.NO_SESSIONS);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    context.addServlet(RedirectServlet.class, "/*");<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    try {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      masterJettyServer.start();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    } catch (Exception e) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      throw new IOException("Failed to start redirecting jetty server", e);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return connector.getLocalPort();<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>  @Override<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    return super.getFsTableDescriptors();<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>  /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * For compatibility, if failed with regionserver credentials, try the master one<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   */<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    try {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      super.login(user, host);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    } catch (IOException ie) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      user.login("hbase.master.keytab.file",<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        "hbase.master.kerberos.principal", host);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<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>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * If configured to put regions on active master,<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * wait till a backup master becomes active.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * Otherwise, loop till the server is stopped or aborted.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   */<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  @Override<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  protected void waitForMasterActive(){<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    boolean tablesOnMaster = BaseLoadBalancer.tablesOnMaster(conf);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    while (!(tablesOnMaster &amp;&amp; isActiveMaster)<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        &amp;&amp; !isStopped() &amp;&amp; !isAborted()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      sleeper.sleep();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public MasterRpcServices getMasterRpcServices() {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return (MasterRpcServices)rpcServices;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  protected String getProcessName() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    return MASTER;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  protected boolean canCreateBaseZNode() {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return true;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  @Override<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  protected boolean canUpdateTableDescriptor() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return true;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return new MasterRpcServices(this);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  protected void configureInfoServer() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    infoServer.setAttribute(MASTER, this);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      super.configureInfoServer();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return MasterDumpServlet.class;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * Emit the HMaster metrics, such as region in transition metrics.<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * Surrounding in a try block just to be sure metrics doesn't abort HMaster.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void doMetrics() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      if (assignmentManager != null) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        assignmentManager.updateRegionsInTransitionMetrics();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    } catch (Throwable e) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      LOG.error("Couldn't update metrics: " + e.getMessage());<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>  MetricsMaster getMasterMetrics() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return metricsMaster;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Initialize all ZK based system trackers.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  void initializeZKBasedSystemTrackers() throws IOException,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      InterruptedException, KeeperException, CoordinatedStateException {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    this.normalizer = RegionNormalizerFactory.getRegionNormalizer(conf);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.normalizer.setMasterServices(this);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    this.normalizer.setMasterRpcServices((MasterRpcServices)rpcServices);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    this.loadBalancerTracker.start();<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    this.regionNormalizerTracker = new RegionNormalizerTracker(zooKeeper, this);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    this.regionNormalizerTracker.start();<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    this.splitOrMergeTracker.start();<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.assignmentManager = new AssignmentManager(this, serverManager,<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      this.balancer, this.service, this.metricsMaster,<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      this.tableLockManager, tableStateManager);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    this.regionServerTracker.start();<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.drainingServerTracker.start();<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    this.maintenanceModeTracker = new MasterMaintenanceModeTracker(zooKeeper);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    this.maintenanceModeTracker.start();<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // going ahead with their startup.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    LOG.info("Server active/primary master=" + this.serverName +<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        ", sessionid=0x" +<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    this.snapshotManager = new SnapshotManager();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    this.mpmHost.register(this.snapshotManager);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    this.mpmHost.loadProcedures(conf);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    this.mpmHost.initialize(this, this.metricsMaster);<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><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;ol&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * &lt;li&gt;Initialize master components - file system manager, server manager,<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   *     assignment manager, region server tracker, etc&lt;/li&gt;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior,<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *     executor services, etc&lt;/li&gt;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;li&gt;Set cluster as UP in ZooKeeper&lt;/li&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;li&gt;Wait for RegionServers to check-in&lt;/li&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * &lt;li&gt;Split logs and perform data recovery, if necessary&lt;/li&gt;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * &lt;li&gt;Ensure assignment of meta/namespace regions&lt;li&gt;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * &lt;li&gt;Handle either fresh cluster start or master failover&lt;/li&gt;<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * &lt;/ol&gt;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  private void finishActiveMasterInitialization(MonitoredTask status)<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      throws IOException, InterruptedException, KeeperException, CoordinatedStateException {<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    isActiveMaster = true;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this));<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    zombieDetector.start();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    /*<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * We are active master now... go initialize components we need to run.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * Note, there may be dross in zk from previous runs; it'll get addressed<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     * below after we determine if cluster startup or failover.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     */<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    status.setStatus("Initializing Master file system");<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    this.fileSystemManager = new MasterFileSystem(this);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    this.walManager = new MasterWalManager(this);<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>    // enable table descriptors cache<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    this.tableDescriptors.setCacheOn();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    // set the META's descriptor to the correct replication<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    this.tableDescriptors.get(TableName.META_TABLE_NAME).setRegionReplication(<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    // warm-up HTDs cache on master initialization<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (preLoadTableDescriptors) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      status.setStatus("Pre-loading table descriptors");<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      this.tableDescriptors.getAll();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>    // publish cluster ID<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    status.setStatus("Publishing Cluster ID in ZooKeeper");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    this.initLatch.countDown();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    this.serverManager = createServerManager(this);<a name="line.703"></a>
-<span class="sourceLineNo">704</span><a name="line.704"></a>
-<span class="sourceLineNo">705</span>    // Invalidate all write locks held previously<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    this.tableLockManager.reapWriteLocks();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.tableStateManager = new TableStateManager(this);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    status.setStatus("Initializing ZK system trackers");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    initializeZKBasedSystemTrackers();<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    // This is for backwards compatibility<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    // See HBASE-11393<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    TableCFsUpdater tableCFsUpdater = new TableCFsUpdater(zooKeeper,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            conf, this.clusterConnection);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    tableCFsUpdater.update();<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    // initialize master side coprocessors before we start handling requests<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    status.setStatus("Initializing master coprocessors");<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>    // start up all service threads.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    status.setStatus("Initializing master service threads");<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    startServiceThreads();<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // Wake up this server to check in<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    sleeper.skipSleepCycle();<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Wait for region servers to report in<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    status.setStatus("Wait for region servers to report in");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    waitForRegionServers(status);<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // get a list for previously failed RS which need log splitting work<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // we recover hbase:meta region servers inside master initialization and<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // handle other failed servers in SSH in order to start up master node ASAP<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap(this, status);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    metaBootstrap.splitMetaLogsBeforeAssignment();<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.initializationBeforeMetaAssignment = true;<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>    // Wait for regionserver to finish initialization.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    if (BaseLoadBalancer.tablesOnMaster(conf)) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      waitForServerOnline();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>    //initialize load balancer<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    this.balancer.setMasterServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    this.balancer.initialize();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>    // Check if master is shutting down because of some issue<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    // in initializing the regionserver or the balancer.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    if (isStopped()) return;<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    // Make sure meta assigned before proceeding.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    status.setStatus("Assigning Meta Region");<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    metaBootstrap.assignMeta();<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    // check if master is shutting down because above assignMeta could return even hbase:meta isn't<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    // assigned when master is shutting down<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (isStopped()) return;<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>    // migrating existent table state from zk, so splitters<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    // and recovery process treat states properly.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        .queryForTableStates(getZooKeeper()).entrySet()) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      LOG.info("Converting state from zk to new states:" + entry);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      tableStateManager.setTableState(entry.getKey(), entry.getValue());<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    ZKUtil.deleteChildrenRecursively(getZooKeeper(), getZooKeeper().tableZNode);<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>    status.setStatus("Submitting log splitting work for previously failed region servers");<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    metaBootstrap.processDeadServers();<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Fix up assignment manager status<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    status.setStatus("Starting assignment manager");<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    this.assignmentManager.joinCluster();<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>    // set cluster status again after user regions are assigned<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.balancer.setClusterStatus(getClusterStatus());<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    this.balancerChore = new BalancerChore(this);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    getChoreService().scheduleChore(balancerChore);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    this.catalogJanitorChore = new CatalogJanitor(this, this);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>    // Do Metrics periodically<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    periodicDoMetricsChore = new PeriodicDoMetrics(msgInterval, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    getChoreService().scheduleChore(periodicDoMetricsChore);<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span>    status.setStatus("Starting cluster schema service");<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    initClusterSchemaService();<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>    if (this.cpHost != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        this.cpHost.preMasterInitialization();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      } catch (IOException e) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      }<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>    status.markComplete("Initialization successful");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    LOG.info("Master has completed initialization");<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    configurationManager.registerObserver(this.balancer);<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // Set master as 'initialized'.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    setInitialized(true);<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>    status.setStatus("Assign meta replicas");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    metaBootstrap.assignMetaReplicas();<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>    status.setStatus("Starting quota manager");<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    initQuotaManager();<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    // master initialization. See HBASE-5916.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    status.setStatus("Checking ZNode ACLs");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    initMobCleaner();<a name="line.832"></a>
-<span class="sourceLineNo">833</span><a name="line.833"></a>
-<span class="sourceLineNo">834</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    if (this.cpHost != null) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      // don't let cp initialization errors kill the master<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        this.cpHost.postStartMaster();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      } catch (IOException ioe) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>    zombieDetector.interrupt();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
-<span class="sourceLineNo">846</span><a name="line.846"></a>
-<span class="sourceLineNo">847</span>  private void initMobCleaner() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    } else {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      LOG<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>  /**<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   */<a name="line.865"></a>
-<span class="sourceLineNo">866</span>  MasterMetaBootstrap createMetaBootstrap(final HMaster master, final MonitoredTask status) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    return new MasterMetaBootstrap(master, status);<a name="line.869"></a>
-<span class="sourceLineNo">870</span>  }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>  /**<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * Create a {@link ServerManager} instance.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   */<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    // w/ a mocked up ServerManager.<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    setupClusterConnection();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    return new ServerManager(master);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
-<span class="sourceLineNo">881</span><a name="line.881"></a>
-<span class="sourceLineNo">882</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      throws IOException, InterruptedException {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    this.serverManager.waitForRegionServers(status);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Check zk for region servers that are up but didn't register<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServerName sn: this.regionServerTracker.getOnlineServers()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      // The isServerOnline check is opportunistic, correctness is handled inside<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      if (!this.serverManager.isServerOnline(sn)<a name="line.888"></a>
-<span class="sourceLineNo">889</span>          &amp;&amp; serverManager.checkAndRecordNewServer(sn, ServerLoad.EMPTY_SERVERLOAD)) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        LOG.info("Registered server found up in zk but who has not yet reported in: " + sn);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>  }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>  void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.clusterSchemaService.startAndWait();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (!this.clusterSchemaService.isRunning()) throw new HBaseIOException("Failed start");<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span

<TRUNCATED>

[20/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
index 54788f6..e372d03 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffSeekerState.html
@@ -375,167 +375,169 @@
 <span class="sourceLineNo">367</span>    private int rowLengthWithSize;<a name="line.367"></a>
 <span class="sourceLineNo">368</span>    private long timestamp;<a name="line.368"></a>
 <span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      super(tmpPair, includeTags);<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    protected void copyFromNext(SeekerState that) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      super.copyFromNext(that);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      DiffSeekerState other = (DiffSeekerState) that;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      timestamp = other.timestamp;<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><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @Override<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new BufferedEncodedSeeker&lt;DiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      private byte[] familyNameWithSize;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      private static final int TIMESTAMP_WITH_TYPE_LENGTH =<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          Bytes.SIZEOF_LONG + Bytes.SIZEOF_BYTE;<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>      private void decode(boolean isFirst) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        byte flag = currentBuffer.get();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        byte type = 0;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          if (!isFirst) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            type = current.keyBuffer[current.keyLength - Bytes.SIZEOF_BYTE];<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>        current.ensureSpaceForKey();<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>        if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          // length of row is different, copy everything except family<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>          // copy the row size<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.411"></a>
-<span class="sourceLineNo">412</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.413"></a>
-<span class="sourceLineNo">414</span>              Bytes.SIZEOF_SHORT;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>          // copy the rest of row<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.417"></a>
-<span class="sourceLineNo">418</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // copy the column family<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          System.arraycopy(familyNameWithSize, 0, current.keyBuffer,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              current.rowLengthWithSize, familyNameWithSize.length);<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // copy the qualifier<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          currentBuffer.get(current.keyBuffer,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              current.keyLength - current.rowLengthWithSize -<a name="line.427"></a>
-<span class="sourceLineNo">428</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          // we have to copy part of row and qualifier,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          // but column family is in right place<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>          // before column family (rest of row)<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // after column family (qualifier)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          currentBuffer.get(current.keyBuffer,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              current.keyLength - current.rowLengthWithSize -<a name="line.440"></a>
-<span class="sourceLineNo">441</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        } else {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          // copy just the ending<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>              current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH -<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              current.lastCommonPrefix);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>        // timestamp<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        int pos = current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        int timestampFitInBytes = 1 +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>            ((flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt; SHIFT_TIMESTAMP_LENGTH);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        long timestampOrDiff = ByteBuff.readLong(currentBuffer, timestampFitInBytes);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        if ((flag &amp; FLAG_TIMESTAMP_SIGN) != 0) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          timestampOrDiff = -timestampOrDiff;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        if ((flag &amp; FLAG_TIMESTAMP_IS_DIFF) == 0) { // it is timestamp<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          current.timestamp = timestampOrDiff;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        } else { // it is diff<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          current.timestamp = current.timestamp - timestampOrDiff;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        Bytes.putLong(current.keyBuffer, pos, current.timestamp);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        pos += Bytes.SIZEOF_LONG;<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        // type<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          current.keyBuffer[pos] = type;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>        current.valueOffset = currentBuffer.position();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        currentBuffer.skip(current.valueLength);<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>        if (includesTags()) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          decodeTags();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        if (includesMvcc()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          current.memstoreTS = 0;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      protected void decodeFirst() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>        // read column family<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        byte familyNameLength = currentBuffer.get();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        familyNameWithSize = new byte[familyNameLength + Bytes.SIZEOF_BYTE];<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        familyNameWithSize[0] = familyNameLength;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        currentBuffer.get(familyNameWithSize, Bytes.SIZEOF_BYTE,<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            familyNameLength);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        decode(true);<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>      @Override<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      protected void decodeNext() {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        decode(false);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>      @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      protected DiffSeekerState createSeekerState() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        return new DiffSeekerState(this.tmpPair, this.includesTags());<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>  }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    int decompressedSize = source.readInt();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    ByteBuffer buffer = ByteBuffer.allocate(decompressedSize +<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        allocateHeaderLength);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    buffer.position(allocateHeaderLength);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    DiffCompressionState state = new DiffCompressionState();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    while (source.available() &gt; skipLastBytes) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      uncompressSingleKeyValue(source, buffer, state);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      afterDecodingKeyValue(source, buffer, decodingCtx);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (source.available() != skipLastBytes) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      throw new IllegalStateException("Read too much bytes.");<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return buffer;<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">370</span>    public DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        boolean includeTags, boolean tagsCompressed) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      super(tmpPair, includeTags, tagsCompressed);<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    protected void copyFromNext(SeekerState that) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      super.copyFromNext(that);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      DiffSeekerState other = (DiffSeekerState) that;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      timestamp = other.timestamp;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  @Override<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return new BufferedEncodedSeeker&lt;DiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      private byte[] familyNameWithSize;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      private static final int TIMESTAMP_WITH_TYPE_LENGTH =<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          Bytes.SIZEOF_LONG + Bytes.SIZEOF_BYTE;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>      private void decode(boolean isFirst) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        byte flag = currentBuffer.get();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        byte type = 0;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          if (!isFirst) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            type = current.keyBuffer[current.keyLength - Bytes.SIZEOF_BYTE];<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>        current.ensureSpaceForKey();<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>        if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          // length of row is different, copy everything except family<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>          // copy the row size<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.412"></a>
+<span class="sourceLineNo">413</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.414"></a>
+<span class="sourceLineNo">415</span>              Bytes.SIZEOF_SHORT;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>          // copy the rest of row<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.418"></a>
+<span class="sourceLineNo">419</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // copy the column family<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          System.arraycopy(familyNameWithSize, 0, current.keyBuffer,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>              current.rowLengthWithSize, familyNameWithSize.length);<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>          // copy the qualifier<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          currentBuffer.get(current.keyBuffer,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.427"></a>
+<span class="sourceLineNo">428</span>              current.keyLength - current.rowLengthWithSize -<a name="line.428"></a>
+<span class="sourceLineNo">429</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          // we have to copy part of row and qualifier,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          // but column family is in right place<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span>          // before column family (rest of row)<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // after column family (qualifier)<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          currentBuffer.get(current.keyBuffer,<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              current.keyLength - current.rowLengthWithSize -<a name="line.441"></a>
+<span class="sourceLineNo">442</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        } else {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          // copy just the ending<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.445"></a>
+<span class="sourceLineNo">446</span>              current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH -<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              current.lastCommonPrefix);<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>        // timestamp<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        int pos = current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        int timestampFitInBytes = 1 +<a name="line.452"></a>
+<span class="sourceLineNo">453</span>            ((flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt; SHIFT_TIMESTAMP_LENGTH);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        long timestampOrDiff = ByteBuff.readLong(currentBuffer, timestampFitInBytes);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        if ((flag &amp; FLAG_TIMESTAMP_SIGN) != 0) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          timestampOrDiff = -timestampOrDiff;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        if ((flag &amp; FLAG_TIMESTAMP_IS_DIFF) == 0) { // it is timestamp<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          current.timestamp = timestampOrDiff;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        } else { // it is diff<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          current.timestamp = current.timestamp - timestampOrDiff;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>        }<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        Bytes.putLong(current.keyBuffer, pos, current.timestamp);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        pos += Bytes.SIZEOF_LONG;<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        // type<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          current.keyBuffer[pos] = type;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        }<a name="line.471"></a>
+<span class="sourceLineNo">472</span><a name="line.472"></a>
+<span class="sourceLineNo">473</span>        current.valueOffset = currentBuffer.position();<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        currentBuffer.skip(current.valueLength);<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>        if (includesTags()) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          decodeTags();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        if (includesMvcc()) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>          current.memstoreTS = 0;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      protected void decodeFirst() {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>        // read column family<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        byte familyNameLength = currentBuffer.get();<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        familyNameWithSize = new byte[familyNameLength + Bytes.SIZEOF_BYTE];<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        familyNameWithSize[0] = familyNameLength;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>        currentBuffer.get(familyNameWithSize, Bytes.SIZEOF_BYTE,<a name="line.495"></a>
+<span class="sourceLineNo">496</span>            familyNameLength);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        decode(true);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>      @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      protected void decodeNext() {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        decode(false);<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>      @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      protected DiffSeekerState createSeekerState() {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        return new DiffSeekerState(this.tmpPair, this.includesTags(),<a name="line.507"></a>
+<span class="sourceLineNo">508</span>            this.tagsCompressed());<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    };<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  @Override<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength,<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    int decompressedSize = source.readInt();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    ByteBuffer buffer = ByteBuffer.allocate(decompressedSize +<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        allocateHeaderLength);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    buffer.position(allocateHeaderLength);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    DiffCompressionState state = new DiffCompressionState();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    while (source.available() &gt; skipLastBytes) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      uncompressSingleKeyValue(source, buffer, state);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      afterDecodingKeyValue(source, buffer, decodingCtx);<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>    if (source.available() != skipLastBytes) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      throw new IllegalStateException("Read too much bytes.");<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    return buffer;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
index 54788f6..e372d03 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html
@@ -375,167 +375,169 @@
 <span class="sourceLineNo">367</span>    private int rowLengthWithSize;<a name="line.367"></a>
 <span class="sourceLineNo">368</span>    private long timestamp;<a name="line.368"></a>
 <span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      super(tmpPair, includeTags);<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    protected void copyFromNext(SeekerState that) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      super.copyFromNext(that);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      DiffSeekerState other = (DiffSeekerState) that;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      timestamp = other.timestamp;<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><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @Override<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new BufferedEncodedSeeker&lt;DiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      private byte[] familyNameWithSize;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      private static final int TIMESTAMP_WITH_TYPE_LENGTH =<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          Bytes.SIZEOF_LONG + Bytes.SIZEOF_BYTE;<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>      private void decode(boolean isFirst) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        byte flag = currentBuffer.get();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        byte type = 0;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          if (!isFirst) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            type = current.keyBuffer[current.keyLength - Bytes.SIZEOF_BYTE];<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>        current.ensureSpaceForKey();<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>        if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          // length of row is different, copy everything except family<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>          // copy the row size<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.411"></a>
-<span class="sourceLineNo">412</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.413"></a>
-<span class="sourceLineNo">414</span>              Bytes.SIZEOF_SHORT;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>          // copy the rest of row<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.417"></a>
-<span class="sourceLineNo">418</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // copy the column family<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          System.arraycopy(familyNameWithSize, 0, current.keyBuffer,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              current.rowLengthWithSize, familyNameWithSize.length);<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // copy the qualifier<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          currentBuffer.get(current.keyBuffer,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              current.keyLength - current.rowLengthWithSize -<a name="line.427"></a>
-<span class="sourceLineNo">428</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          // we have to copy part of row and qualifier,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          // but column family is in right place<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>          // before column family (rest of row)<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // after column family (qualifier)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          currentBuffer.get(current.keyBuffer,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              current.keyLength - current.rowLengthWithSize -<a name="line.440"></a>
-<span class="sourceLineNo">441</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        } else {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          // copy just the ending<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>              current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH -<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              current.lastCommonPrefix);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>        // timestamp<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        int pos = current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        int timestampFitInBytes = 1 +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>            ((flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt; SHIFT_TIMESTAMP_LENGTH);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        long timestampOrDiff = ByteBuff.readLong(currentBuffer, timestampFitInBytes);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        if ((flag &amp; FLAG_TIMESTAMP_SIGN) != 0) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          timestampOrDiff = -timestampOrDiff;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        if ((flag &amp; FLAG_TIMESTAMP_IS_DIFF) == 0) { // it is timestamp<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          current.timestamp = timestampOrDiff;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        } else { // it is diff<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          current.timestamp = current.timestamp - timestampOrDiff;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        Bytes.putLong(current.keyBuffer, pos, current.timestamp);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        pos += Bytes.SIZEOF_LONG;<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        // type<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          current.keyBuffer[pos] = type;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>        current.valueOffset = currentBuffer.position();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        currentBuffer.skip(current.valueLength);<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>        if (includesTags()) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          decodeTags();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        if (includesMvcc()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          current.memstoreTS = 0;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      protected void decodeFirst() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>        // read column family<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        byte familyNameLength = currentBuffer.get();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        familyNameWithSize = new byte[familyNameLength + Bytes.SIZEOF_BYTE];<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        familyNameWithSize[0] = familyNameLength;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        currentBuffer.get(familyNameWithSize, Bytes.SIZEOF_BYTE,<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            familyNameLength);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        decode(true);<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>      @Override<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      protected void decodeNext() {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        decode(false);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>      @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      protected DiffSeekerState createSeekerState() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        return new DiffSeekerState(this.tmpPair, this.includesTags());<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>  }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    int decompressedSize = source.readInt();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    ByteBuffer buffer = ByteBuffer.allocate(decompressedSize +<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        allocateHeaderLength);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    buffer.position(allocateHeaderLength);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    DiffCompressionState state = new DiffCompressionState();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    while (source.available() &gt; skipLastBytes) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      uncompressSingleKeyValue(source, buffer, state);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      afterDecodingKeyValue(source, buffer, decodingCtx);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (source.available() != skipLastBytes) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      throw new IllegalStateException("Read too much bytes.");<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return buffer;<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">370</span>    public DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        boolean includeTags, boolean tagsCompressed) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      super(tmpPair, includeTags, tagsCompressed);<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    protected void copyFromNext(SeekerState that) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      super.copyFromNext(that);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      DiffSeekerState other = (DiffSeekerState) that;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      timestamp = other.timestamp;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  @Override<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return new BufferedEncodedSeeker&lt;DiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      private byte[] familyNameWithSize;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      private static final int TIMESTAMP_WITH_TYPE_LENGTH =<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          Bytes.SIZEOF_LONG + Bytes.SIZEOF_BYTE;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>      private void decode(boolean isFirst) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        byte flag = currentBuffer.get();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        byte type = 0;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          if (!isFirst) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            type = current.keyBuffer[current.keyLength - Bytes.SIZEOF_BYTE];<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>        current.ensureSpaceForKey();<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>        if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          // length of row is different, copy everything except family<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>          // copy the row size<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.412"></a>
+<span class="sourceLineNo">413</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.414"></a>
+<span class="sourceLineNo">415</span>              Bytes.SIZEOF_SHORT;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>          // copy the rest of row<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.418"></a>
+<span class="sourceLineNo">419</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // copy the column family<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          System.arraycopy(familyNameWithSize, 0, current.keyBuffer,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>              current.rowLengthWithSize, familyNameWithSize.length);<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>          // copy the qualifier<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          currentBuffer.get(current.keyBuffer,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.427"></a>
+<span class="sourceLineNo">428</span>              current.keyLength - current.rowLengthWithSize -<a name="line.428"></a>
+<span class="sourceLineNo">429</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          // we have to copy part of row and qualifier,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          // but column family is in right place<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span>          // before column family (rest of row)<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // after column family (qualifier)<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          currentBuffer.get(current.keyBuffer,<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              current.keyLength - current.rowLengthWithSize -<a name="line.441"></a>
+<span class="sourceLineNo">442</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        } else {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          // copy just the ending<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.445"></a>
+<span class="sourceLineNo">446</span>              current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH -<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              current.lastCommonPrefix);<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>        // timestamp<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        int pos = current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        int timestampFitInBytes = 1 +<a name="line.452"></a>
+<span class="sourceLineNo">453</span>            ((flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt; SHIFT_TIMESTAMP_LENGTH);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        long timestampOrDiff = ByteBuff.readLong(currentBuffer, timestampFitInBytes);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        if ((flag &amp; FLAG_TIMESTAMP_SIGN) != 0) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          timestampOrDiff = -timestampOrDiff;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        if ((flag &amp; FLAG_TIMESTAMP_IS_DIFF) == 0) { // it is timestamp<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          current.timestamp = timestampOrDiff;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        } else { // it is diff<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          current.timestamp = current.timestamp - timestampOrDiff;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>        }<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        Bytes.putLong(current.keyBuffer, pos, current.timestamp);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        pos += Bytes.SIZEOF_LONG;<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        // type<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          current.keyBuffer[pos] = type;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        }<a name="line.471"></a>
+<span class="sourceLineNo">472</span><a name="line.472"></a>
+<span class="sourceLineNo">473</span>        current.valueOffset = currentBuffer.position();<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        currentBuffer.skip(current.valueLength);<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>        if (includesTags()) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          decodeTags();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        if (includesMvcc()) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>          current.memstoreTS = 0;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      protected void decodeFirst() {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>        // read column family<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        byte familyNameLength = currentBuffer.get();<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        familyNameWithSize = new byte[familyNameLength + Bytes.SIZEOF_BYTE];<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        familyNameWithSize[0] = familyNameLength;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>        currentBuffer.get(familyNameWithSize, Bytes.SIZEOF_BYTE,<a name="line.495"></a>
+<span class="sourceLineNo">496</span>            familyNameLength);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        decode(true);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>      @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      protected void decodeNext() {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        decode(false);<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>      @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      protected DiffSeekerState createSeekerState() {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        return new DiffSeekerState(this.tmpPair, this.includesTags(),<a name="line.507"></a>
+<span class="sourceLineNo">508</span>            this.tagsCompressed());<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    };<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  @Override<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength,<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    int decompressedSize = source.readInt();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    ByteBuffer buffer = ByteBuffer.allocate(decompressedSize +<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        allocateHeaderLength);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    buffer.position(allocateHeaderLength);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    DiffCompressionState state = new DiffCompressionState();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    while (source.available() &gt; skipLastBytes) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      uncompressSingleKeyValue(source, buffer, state);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      afterDecodingKeyValue(source, buffer, decodingCtx);<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>    if (source.available() != skipLastBytes) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      throw new IllegalStateException("Read too much bytes.");<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    return buffer;<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>
 
 
 


[35/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
index 23d1397..a62de62 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html
@@ -104,7 +104,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.46">AbstractMemStore</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.47">AbstractMemStore</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a></pre>
 <div class="block">An abstract class, which implements the behaviour shared by all concrete memstore instances.</div>
@@ -386,7 +386,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_SNAPSHOT_ID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.48">NO_SNAPSHOT_ID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.49">NO_SNAPSHOT_ID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.AbstractMemStore.NO_SNAPSHOT_ID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -396,7 +396,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.50">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.51">conf</a></pre>
 </li>
 </ul>
 <a name="comparator">
@@ -405,7 +405,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>comparator</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.51">comparator</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.52">comparator</a></pre>
 </li>
 </ul>
 <a name="active">
@@ -414,7 +414,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>active</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">MutableSegment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.54">active</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">MutableSegment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.55">active</a></pre>
 </li>
 </ul>
 <a name="snapshot">
@@ -423,7 +423,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.56">snapshot</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.57">snapshot</a></pre>
 </li>
 </ul>
 <a name="snapshotId">
@@ -432,7 +432,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotId</h4>
-<pre>protected volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.57">snapshotId</a></pre>
+<pre>protected volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.58">snapshotId</a></pre>
 </li>
 </ul>
 <a name="timeOfOldestEdit">
@@ -441,7 +441,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>timeOfOldestEdit</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.59">timeOfOldestEdit</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.60">timeOfOldestEdit</a></pre>
 </li>
 </ul>
 <a name="FIXED_OVERHEAD">
@@ -450,7 +450,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.61">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.62">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="DEEP_OVERHEAD">
@@ -459,7 +459,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DEEP_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.66">DEEP_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.67">DEEP_OVERHEAD</a></pre>
 </li>
 </ul>
 </li>
@@ -476,7 +476,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AbstractMemStore</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.71">AbstractMemStore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.72">AbstractMemStore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                 <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;c)</pre>
 </li>
 </ul>
@@ -494,7 +494,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>resetActive</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.79">resetActive</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.80">resetActive</a>()</pre>
 </li>
 </ul>
 <a name="heapSizeChange(org.apache.hadoop.hbase.Cell, boolean)">
@@ -503,7 +503,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSizeChange</h4>
-<pre>static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.92">heapSizeChange</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.93">heapSizeChange</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                   boolean&nbsp;notPresent)</pre>
 </li>
 </ul>
@@ -513,7 +513,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>updateLowestUnflushedSequenceIdInWAL</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.102">updateLowestUnflushedSequenceIdInWAL</a>(boolean&nbsp;onlyIfMoreRecent)</pre>
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.103">updateLowestUnflushedSequenceIdInWAL</a>(boolean&nbsp;onlyIfMoreRecent)</pre>
 <div class="block">Updates the wal with the lowest sequence id (oldest entry) that is still in memory</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>onlyIfMoreRecent</code> - a flag that marks whether to update the sequence id no matter what or
                       only if it is greater than the previous sequence id</dd></dl>
@@ -525,7 +525,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.111">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.112">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Write an update</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -541,7 +541,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>deepCopyIfNeeded</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.129">deepCopyIfNeeded</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.130">deepCopyIfNeeded</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 </li>
 </ul>
 <a name="upsert(java.lang.Iterable, long)">
@@ -550,7 +550,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>upsert</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.158">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.159">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
           long&nbsp;readpoint)</pre>
 <div class="block">Update or insert the specified Cells.
  <p>
@@ -577,7 +577,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>timeOfOldestEdit</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.170">timeOfOldestEdit</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.171">timeOfOldestEdit</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#timeOfOldestEdit()">timeOfOldestEdit</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a></code></dd>
@@ -590,7 +590,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.181">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;deleteCell)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.182">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;deleteCell)</pre>
 <div class="block">Write a delete</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -605,15 +605,15 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>clearSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.192">clearSnapshot</a>(long&nbsp;id)
-                   throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.193">clearSnapshot</a>(long&nbsp;id)
+                   throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></pre>
 <div class="block">The passed snapshot was successfully persisted; it can be let go.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#clearSnapshot(long)">clearSnapshot</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a></code></dd>
 <dt><span class="strong">Parameters:</span></dt><dd><code>id</code> - Id of the snapshot to clean out.</dd>
 <dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.regionserver">UnexpectedStateException</a></code></dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#snapshot()"><code>MemStore.snapshot()</code></a></dd></dl>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a></code></dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#snapshot()"><code>MemStore.snapshot()</code></a></dd></dl>
 </li>
 </ul>
 <a name="heapSize()">
@@ -622,7 +622,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.214">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.215">heapSize</a>()</pre>
 <div class="block">Get the entire heap usage for this MemStore not including keys in the
  snapshot.</div>
 <dl>
@@ -638,7 +638,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.219">getSnapshotSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.220">getSnapshotSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html#getSnapshotSize()">MemStore</a></code></strong></div>
 <div class="block">Return the size of the snapshot(s) if any</div>
 <dl>
@@ -653,7 +653,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.224">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.225">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -666,7 +666,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>protected&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.238">getConfiguration</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.239">getConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="dump(org.apache.commons.logging.Log)">
@@ -675,7 +675,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>dump</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.242">dump</a>(org.apache.commons.logging.Log&nbsp;log)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.243">dump</a>(org.apache.commons.logging.Log&nbsp;log)</pre>
 </li>
 </ul>
 <a name="upsert(org.apache.hadoop.hbase.Cell, long)">
@@ -684,7 +684,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>upsert</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.263">upsert</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.264">upsert</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
           long&nbsp;readpoint)</pre>
 <div class="block">Inserts the specified Cell into MemStore and deletes any existing
  versions of the same row/family/qualifier as the specified Cell.
@@ -705,7 +705,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getLowest</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.325">getLowest</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.326">getLowest</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
              <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b)</pre>
 </li>
 </ul>
@@ -715,7 +715,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextRow</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.341">getNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.342">getNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;set)</pre>
 </li>
 </ul>
@@ -725,7 +725,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>updateColumnValue</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.368">updateColumnValue</a>(byte[]&nbsp;row,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.369">updateColumnValue</a>(byte[]&nbsp;row,
                      byte[]&nbsp;family,
                      byte[]&nbsp;qualifier,
                      long&nbsp;newValue,
@@ -748,7 +748,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>maybeCloneWithAllocator</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.409">maybeCloneWithAllocator</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.410">maybeCloneWithAllocator</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 </li>
 </ul>
 <a name="internalAdd(org.apache.hadoop.hbase.Cell, boolean)">
@@ -757,7 +757,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>internalAdd</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.422">internalAdd</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;toAdd,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.423">internalAdd</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;toAdd,
                boolean&nbsp;mslabUsed)</pre>
 <div class="block">Internal version of add() that doesn't clone Cells with the
  allocator, and doesn't take the lock.
@@ -773,7 +773,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>setOldestEditTimeToNow</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.429">setOldestEditTimeToNow</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.430">setOldestEditTimeToNow</a>()</pre>
 </li>
 </ul>
 <a name="keySize()">
@@ -782,7 +782,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>keySize</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.435">keySize</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.436">keySize</a>()</pre>
 </li>
 </ul>
 <a name="getComparator()">
@@ -791,7 +791,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getComparator</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.439">getComparator</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.440">getComparator</a>()</pre>
 </li>
 </ul>
 <a name="getActive()">
@@ -800,7 +800,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getActive</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">MutableSegment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.443">getActive</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">MutableSegment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.444">getActive</a>()</pre>
 </li>
 </ul>
 <a name="getSnapshot()">
@@ -809,7 +809,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshot</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.447">getSnapshot</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.448">getSnapshot</a>()</pre>
 </li>
 </ul>
 <a name="setSnapshot(org.apache.hadoop.hbase.regionserver.ImmutableSegment)">
@@ -818,7 +818,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>setSnapshot</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html" title="class in org.apache.hadoop.hbase.regionserver">AbstractMemStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.451">setSnapshot</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a>&nbsp;snapshot)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html" title="class in org.apache.hadoop.hbase.regionserver">AbstractMemStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.452">setSnapshot</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a>&nbsp;snapshot)</pre>
 </li>
 </ul>
 <a name="setSnapshotSize(long)">
@@ -827,7 +827,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>setSnapshotSize</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.456">setSnapshotSize</a>(long&nbsp;snapshotSize)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.457">setSnapshotSize</a>(long&nbsp;snapshotSize)</pre>
 </li>
 </ul>
 <a name="checkActiveSize()">
@@ -836,7 +836,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>checkActiveSize</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.463">checkActiveSize</a>()</pre>
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.464">checkActiveSize</a>()</pre>
 <div class="block">Check whether anything need to be done based on the current active set size</div>
 </li>
 </ul>
@@ -846,7 +846,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSegments</h4>
-<pre>protected abstract&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.469">getSegments</a>()
+<pre>protected abstract&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#line.470">getSegments</a>()
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns an ordered list of segments from most recent to oldest in memstore</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>an ordered list of segments from most recent to oldest in memstore</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 1f58f91..592ec45 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1575">HRegionServer.CompactionChecker</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1580">HRegionServer.CompactionChecker</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -219,7 +219,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>instance</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1576">instance</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1581">instance</a></pre>
 </li>
 </ul>
 <a name="majorCompactPriority">
@@ -228,7 +228,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactPriority</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1577">majorCompactPriority</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1582">majorCompactPriority</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_PRIORITY">
@@ -237,7 +237,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PRIORITY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1578">DEFAULT_PRIORITY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1583">DEFAULT_PRIORITY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.CompactionChecker.DEFAULT_PRIORITY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -247,7 +247,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>iteration</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1579">iteration</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1584">iteration</a></pre>
 </li>
 </ul>
 </li>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionServer.CompactionChecker</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1581">HRegionServer.CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1586">HRegionServer.CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
                                int&nbsp;sleepTime,
                                <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper)</pre>
 </li>
@@ -283,7 +283,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1596">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1601">chore</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore()">ScheduledChore</a></code></strong></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 229b5c6..626d462 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3100">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3105">HRegionServer.MovedRegionInfo</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -204,7 +204,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3101">serverName</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3106">serverName</a></pre>
 </li>
 </ul>
 <a name="seqNum">
@@ -213,7 +213,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>seqNum</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3102">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3107">seqNum</a></pre>
 </li>
 </ul>
 <a name="ts">
@@ -222,7 +222,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ts</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3103">ts</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3108">ts</a></pre>
 </li>
 </ul>
 </li>
@@ -239,7 +239,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionServer.MovedRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3105">HRegionServer.MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3110">HRegionServer.MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                              long&nbsp;closeSeqNum)</pre>
 </li>
 </ul>
@@ -257,7 +257,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</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/regionserver/HRegionServer.MovedRegionInfo.html#line.3111">getServerName</a>()</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/regionserver/HRegionServer.MovedRegionInfo.html#line.3116">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getSeqNum()">
@@ -266,7 +266,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3115">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3120">getSeqNum</a>()</pre>
 </li>
 </ul>
 <a name="getMoveTime()">
@@ -275,7 +275,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMoveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3119">getMoveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3124">getMoveTime</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index 6fe3e75..84a3099 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3189">HRegionServer.MovedRegionsCleaner</a>
+<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3194">HRegionServer.MovedRegionsCleaner</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">Creates a Chore thread to clean the moved region cache.</div>
@@ -228,7 +228,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3190">regionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3195">regionServer</a></pre>
 </li>
 </ul>
 <a name="stoppable">
@@ -237,7 +237,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stoppable</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3191">stoppable</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3196">stoppable</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionServer.MovedRegionsCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3193">HRegionServer.MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3198">HRegionServer.MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
                                  <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stoppable)</pre>
 </li>
 </ul>
@@ -272,7 +272,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3201">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3206">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="chore()">
@@ -281,7 +281,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3212">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3217">chore</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore()">ScheduledChore</a></code></strong></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
@@ -296,7 +296,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3217">stop</a>(<a href="http://docs.oracle.com/javase/7/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/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3222">stop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop(java.lang.String)">Stoppable</a></code></strong></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -312,7 +312,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3222">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3227">isStopped</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html
index 8d65d4b..f62b2ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1629">HRegionServer.PeriodicMemstoreFlusher</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1634">HRegionServer.PeriodicMemstoreFlusher</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -214,7 +214,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1630">server</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1635">server</a></pre>
 </li>
 </ul>
 <a name="RANGE_OF_DELAY">
@@ -223,7 +223,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>RANGE_OF_DELAY</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1631">RANGE_OF_DELAY</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1636">RANGE_OF_DELAY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemstoreFlusher.RANGE_OF_DELAY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MIN_DELAY_TIME</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1632">MIN_DELAY_TIME</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1637">MIN_DELAY_TIME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemstoreFlusher.MIN_DELAY_TIME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -251,7 +251,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionServer.PeriodicMemstoreFlusher</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1633">HRegionServer.PeriodicMemstoreFlusher</a>(int&nbsp;cacheFlushInterval,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1638">HRegionServer.PeriodicMemstoreFlusher</a>(int&nbsp;cacheFlushInterval,
                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server)</pre>
 </li>
 </ul>
@@ -269,7 +269,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1639">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemstoreFlusher.html#line.1644">chore</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore()">ScheduledChore</a></code></strong></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>


[37/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
index 79158cf..1102aac 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html
@@ -111,7 +111,7 @@
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.LimitedPrivate</a>(<a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html#value()">value</a>="Configuration")
 <a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Unstable</a>
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.100">SnapshotManager</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.105">SnapshotManager</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManager.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManager</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">This class manages the procedure of taking and restoring snapshots. There is only one
@@ -158,40 +158,49 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isSnapshotSupported">isSnapshotSupported</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#locks">locks</a></strong></code>
+<div class="block">Locks for snapshot operations
+  key is snapshot's filename in progress, value is the related lock
+    - create snapshot
+    - SnapshotCleaner</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#master">master</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION">ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION</a></strong></code>
 <div class="block">Name of the operation to use in the controller</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#restoreTableToProcIdMap">restoreTableToProcIdMap</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#rootDir">rootDir</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#SNAPSHOT_POOL_THREADS_DEFAULT">SNAPSHOT_POOL_THREADS_DEFAULT</a></strong></code>
 <div class="block">number of current operations running on the master</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#SNAPSHOT_POOL_THREADS_KEY">SNAPSHOT_POOL_THREADS_KEY</a></strong></code>
 <div class="block">Conf key for # of threads used by the SnapshotManager thread pool</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT">SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT</a></strong></code>
 <div class="block">Wait time before removing a finished sentinel from the in-progress map
@@ -199,24 +208,24 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
  NOTE: This is used as a safety auto cleanup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#SNAPSHOT_WAKE_MILLIS_DEFAULT">SNAPSHOT_WAKE_MILLIS_DEFAULT</a></strong></code>
 <div class="block">By default, check to see if the snapshot is complete every WAKE MILLIS (ms)</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#SNAPSHOT_WAKE_MILLIS_KEY">SNAPSHOT_WAKE_MILLIS_KEY</a></strong></code>
 <div class="block">Conf key for # of ms elapsed between checks for snapshot errors while waiting for
  completion.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#snapshotHandlers">snapshotHandlers</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#stopped">stopped</a></strong></code>&nbsp;</td>
 </tr>
@@ -342,80 +351,84 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#getCoordinator()">getCoordinator</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#getLocks()">getLocks</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#getProcedureSignature()">getProcedureSignature</a></strong>()</code>
 <div class="block">Return the unique signature of the procedure.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#initialize(org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.MetricsMaster)">initialize</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master,
                     <a href="../../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;metricsMaster)</code>
 <div class="block">Initialize a globally barriered procedure for master.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isProcedureDone(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription)">isProcedureDone</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)</code>
 <div class="block">Check if the procedure is finished successfully</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isRestoringTable(org.apache.hadoop.hbase.TableName)">isRestoringTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Verify if the restore of the specified table is in progress.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isSnapshotCompleted(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">isSnapshotCompleted</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Check to see if the snapshot is one of the currently completed snapshots
  Returns true if the snapshot exists in the "completed snapshots folder".</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isSnapshotDone(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">isSnapshotDone</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;expected)</code>
 <div class="block">Check if the specified snapshot is done</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isStopped()">isStopped</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isTakingSnapshot(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">isTakingSnapshot</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Check to see if there is a snapshot in progress with the same name or on the same table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#isTakingSnapshot(org.apache.hadoop.hbase.TableName)">isTakingSnapshot</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Check to see if the specified table has a snapshot in progress.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#prepareToTakeSnapshot(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">prepareToTakeSnapshot</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Check to make sure that we are OK to run the passed snapshot.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#removeSentinelIfFinished(java.util.Map,%20org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">removeSentinelIfFinished</a></strong>(<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt;&nbsp;sentinels,
                                                 org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Return the handler if it is currently live and has the same snapshot target name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#resetTempDir()">resetTempDir</a></strong>()</code>
 <div class="block">Cleans up any snapshots in the snapshot/.tmp directory that were left from failed
  snapshot attempts.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#restoreOrCloneSnapshot(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20long,%20long)">restoreOrCloneSnapshot</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
                                             long&nbsp;nonceGroup,
@@ -423,7 +436,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <div class="block">Restore or Clone the specified snapshot</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#restoreSnapshot(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.HTableDescriptor,%20long,%20long)">restoreSnapshot</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                               <a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
@@ -432,7 +445,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <div class="block">Restore the specified snapshot.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#restoreSnapshot(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.HTableDescriptor,%20long,%20long)">restoreSnapshot</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -443,45 +456,45 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <div class="block">Restore the specified snapshot.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#setSnapshotHandlerForTesting(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.master.SnapshotSentinel)">setSnapshotHandlerForTesting</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                         <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&nbsp;handler)</code>
 <div class="block">Set the handler for the current snapshot</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#snapshotDisabledTable(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">snapshotDisabledTable</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Take a snapshot of a disabled table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#snapshotEnabledTable(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">snapshotEnabledTable</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Take a snapshot of an enabled table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#snapshotTable(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler)">snapshotTable</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                           <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a>&nbsp;handler)</code>
 <div class="block">Take a snapshot using the specified handler.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#stop(java.lang.String)">stop</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</code>
 <div class="block">Stop this service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#takeSnapshot(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription)">takeSnapshot</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</code>
 <div class="block">Take a snapshot based on the enabled/disabled state of the table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#toSnapshotDescription(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription)">toSnapshotDescription</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)</code>&nbsp;</td>
 </tr>
@@ -527,7 +540,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.101">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.106">LOG</a></pre>
 </li>
 </ul>
 <a name="SNAPSHOT_WAKE_MILLIS_DEFAULT">
@@ -536,7 +549,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_WAKE_MILLIS_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.104">SNAPSHOT_WAKE_MILLIS_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.109">SNAPSHOT_WAKE_MILLIS_DEFAULT</a></pre>
 <div class="block">By default, check to see if the snapshot is complete every WAKE MILLIS (ms)</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.SNAPSHOT_WAKE_MILLIS_DEFAULT">Constant Field Values</a></dd></dl>
 </li>
@@ -547,7 +560,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.117">SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.122">SNAPSHOT_SENTINELS_CLEANUP_TIMEOUT</a></pre>
 <div class="block">Wait time before removing a finished sentinel from the in-progress map
 
  NOTE: This is used as a safety auto cleanup.
@@ -566,7 +579,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SNAPSHOT_ENABLED</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.120">HBASE_SNAPSHOT_ENABLED</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.125">HBASE_SNAPSHOT_ENABLED</a></pre>
 <div class="block">Enable or disable snapshot support</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.HBASE_SNAPSHOT_ENABLED">Constant Field Values</a></dd></dl>
 </li>
@@ -577,7 +590,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_WAKE_MILLIS_KEY</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.126">SNAPSHOT_WAKE_MILLIS_KEY</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.131">SNAPSHOT_WAKE_MILLIS_KEY</a></pre>
 <div class="block">Conf key for # of ms elapsed between checks for snapshot errors while waiting for
  completion.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.SNAPSHOT_WAKE_MILLIS_KEY">Constant Field Values</a></dd></dl>
@@ -589,7 +602,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.129">ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.134">ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION</a></pre>
 <div class="block">Name of the operation to use in the controller</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION">Constant Field Values</a></dd></dl>
 </li>
@@ -600,7 +613,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_POOL_THREADS_KEY</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.132">SNAPSHOT_POOL_THREADS_KEY</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.137">SNAPSHOT_POOL_THREADS_KEY</a></pre>
 <div class="block">Conf key for # of threads used by the SnapshotManager thread pool</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.SNAPSHOT_POOL_THREADS_KEY">Constant Field Values</a></dd></dl>
 </li>
@@ -611,7 +624,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_POOL_THREADS_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.135">SNAPSHOT_POOL_THREADS_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.140">SNAPSHOT_POOL_THREADS_DEFAULT</a></pre>
 <div class="block">number of current operations running on the master</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT">Constant Field Values</a></dd></dl>
 </li>
@@ -622,7 +635,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>stopped</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.137">stopped</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.142">stopped</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -631,7 +644,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.138">master</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.143">master</a></pre>
 </li>
 </ul>
 <a name="coordinator">
@@ -640,7 +653,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>coordinator</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureCoordinator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.139">coordinator</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureCoordinator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.144">coordinator</a></pre>
 </li>
 </ul>
 <a name="isSnapshotSupported">
@@ -649,7 +662,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isSnapshotSupported</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.142">isSnapshotSupported</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.147">isSnapshotSupported</a></pre>
 </li>
 </ul>
 <a name="snapshotHandlers">
@@ -658,7 +671,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotHandlers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.148">snapshotHandlers</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.153">snapshotHandlers</a></pre>
 </li>
 </ul>
 <a name="restoreTableToProcIdMap">
@@ -667,7 +680,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreTableToProcIdMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.158">restoreTableToProcIdMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.163">restoreTableToProcIdMap</a></pre>
 </li>
 </ul>
 <a name="rootDir">
@@ -676,16 +689,29 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>rootDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.160">rootDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.165">rootDir</a></pre>
 </li>
 </ul>
 <a name="executorService">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>executorService</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.161">executorService</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.166">executorService</a></pre>
+</li>
+</ul>
+<a name="locks">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>locks</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.174">locks</a></pre>
+<div class="block">Locks for snapshot operations
+  key is snapshot's filename in progress, value is the related lock
+    - create snapshot
+    - SnapshotCleaner</div>
 </li>
 </ul>
 </li>
@@ -702,7 +728,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>SnapshotManager</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.163">SnapshotManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.178">SnapshotManager</a>()</pre>
 </li>
 </ul>
 <a name="SnapshotManager(org.apache.hadoop.hbase.master.MasterServices, org.apache.hadoop.hbase.master.MetricsMaster, org.apache.hadoop.hbase.procedure.ProcedureCoordinator, org.apache.hadoop.hbase.executor.ExecutorService)">
@@ -711,7 +737,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotManager</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.171">SnapshotManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.186">SnapshotManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master,
                <a href="../../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;metricsMaster,
                <a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureCoordinator</a>&nbsp;coordinator,
                <a href="../../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;pool)
@@ -738,7 +764,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletedSnapshots</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.189">getCompletedSnapshots</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.204">getCompletedSnapshots</a>()
                                                                                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Gets the list of all completed snapshots.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>list of SnapshotDescriptions</dd>
@@ -752,7 +778,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletedSnapshots</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.199">getCompletedSnapshots</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir)
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.214">getCompletedSnapshots</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir)
                                                                                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Gets the list of all completed snapshots.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshotDir</code> - snapshot directory</dd>
@@ -767,7 +793,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>resetTempDir</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.259">resetTempDir</a>()
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.274">resetTempDir</a>()
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Cleans up any snapshots in the snapshot/.tmp directory that were left from failed
  snapshot attempts.</div>
@@ -781,7 +807,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.275">deleteSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.290">deleteSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
                     throws <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotDoesNotExistException.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotDoesNotExistException</a>,
                            <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Delete the specified snapshot</div>
@@ -797,7 +823,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isSnapshotDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.316">isSnapshotDone</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;expected)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.331">isSnapshotDone</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;expected)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check if the specified snapshot is done</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>expected</code> - </dd>
@@ -813,7 +839,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isTakingSnapshot</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.381">isTakingSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.396">isTakingSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</pre>
 <div class="block">Check to see if there is a snapshot in progress with the same name or on the same table.
  Currently we have a limitation only allowing a single snapshot per table at a time. Also we
  don't allow snapshot with the same name.</div>
@@ -828,7 +854,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isTakingSnapshot</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.403">isTakingSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.418">isTakingSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Check to see if the specified table has a snapshot in progress.  Currently we have a
  limitation only allowing a single snapshot per table at a time.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>tableName</code> - name of the table being snapshotted.</dd>
@@ -841,7 +867,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareToTakeSnapshot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.414">prepareToTakeSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.429">prepareToTakeSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
                             throws <a href="../../../../../../org/apache/hadoop/hbase/snapshot/HBaseSnapshotException.html" title="class in org.apache.hadoop.hbase.snapshot">HBaseSnapshotException</a></pre>
 <div class="block">Check to make sure that we are OK to run the passed snapshot. Checks to make sure that we
  aren't already running a snapshot or restore on the requested table.</div>
@@ -856,7 +882,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotDisabledTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.464">snapshotDisabledTable</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.479">snapshotDisabledTable</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
                             throws <a href="../../../../../../org/apache/hadoop/hbase/snapshot/HBaseSnapshotException.html" title="class in org.apache.hadoop.hbase.snapshot">HBaseSnapshotException</a></pre>
 <div class="block">Take a snapshot of a disabled table.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshot</code> - description of the snapshot to take. Modified to be <code>HBaseProtos.SnapshotDescription.Type.DISABLED</code>.</dd>
@@ -870,7 +896,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotEnabledTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.483">snapshotEnabledTable</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.498">snapshotEnabledTable</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
                            throws <a href="../../../../../../org/apache/hadoop/hbase/snapshot/HBaseSnapshotException.html" title="class in org.apache.hadoop.hbase.snapshot">HBaseSnapshotException</a></pre>
 <div class="block">Take a snapshot of an enabled table.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshot</code> - description of the snapshot to take.</dd>
@@ -884,7 +910,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.502">snapshotTable</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.517">snapshotTable</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                  <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a>&nbsp;handler)
                     throws <a href="../../../../../../org/apache/hadoop/hbase/snapshot/HBaseSnapshotException.html" title="class in org.apache.hadoop.hbase.snapshot">HBaseSnapshotException</a></pre>
 <div class="block">Take a snapshot using the specified handler.
@@ -902,7 +928,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>takeSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.533">takeSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.548">takeSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Take a snapshot based on the enabled/disabled state of the table.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshot</code> - </dd>
@@ -917,7 +943,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setSnapshotHandlerForTesting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.620">setSnapshotHandlerForTesting</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.635">setSnapshotHandlerForTesting</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&nbsp;handler)</pre>
 <div class="block">Set the handler for the current snapshot
  <p>
@@ -933,7 +959,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinator</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureCoordinator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.633">getCoordinator</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureCoordinator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.648">getCoordinator</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>distributed commit coordinator for all running snapshots</dd></dl>
 </li>
 </ul>
@@ -943,7 +969,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isSnapshotCompleted</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.647">isSnapshotCompleted</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.662">isSnapshotCompleted</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check to see if the snapshot is one of the currently completed snapshots
  Returns true if the snapshot exists in the "completed snapshots folder".</div>
@@ -961,7 +987,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneSnapshot</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.671">cloneSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.686">cloneSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                  org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                  <a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;snapshotTableDesc,
@@ -982,7 +1008,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneSnapshot</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.709">cloneSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.724">cloneSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                  <a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
                  long&nbsp;nonceGroup,
                  long&nbsp;nonce)
@@ -1001,7 +1027,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreOrCloneSnapshot</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.749">restoreOrCloneSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.764">restoreOrCloneSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1017,7 +1043,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.803">restoreSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.818">restoreSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;reqSnapshot,
                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                    <a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;snapshotTableDesc,
@@ -1038,7 +1064,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.851">restoreSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.866">restoreSnapshot</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                    <a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
                    long&nbsp;nonceGroup,
                    long&nbsp;nonce)
@@ -1057,7 +1083,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isRestoringTable</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.891">isRestoringTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.906">isRestoringTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Verify if the restore of the specified table is in progress.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>tableName</code> - table under restore</dd>
 <dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if there is a restore in progress of the specified table.</dd></dl>
@@ -1069,7 +1095,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>removeSentinelIfFinished</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.913">removeSentinelIfFinished</a>(<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt;&nbsp;sentinels,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.928">removeSentinelIfFinished</a>(<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt;&nbsp;sentinels,
                                         org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot)</pre>
 <div class="block">Return the handler if it is currently live and has the same snapshot target name.
  The handler is removed from the sentinels map if completed.</div>
@@ -1083,7 +1109,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupSentinels</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.946">cleanupSentinels</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.961">cleanupSentinels</a>()</pre>
 <div class="block">Removes "abandoned" snapshot/restore requests.
  As part of the HBaseAdmin snapshot/restore API the operation status is checked until completed,
  and the in-progress maps are cleaned up when the status of a completed task is requested.
@@ -1097,7 +1123,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupSentinels</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.956">cleanupSentinels</a>(<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt;&nbsp;sentinels)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.971">cleanupSentinels</a>(<a href="http://docs.oracle.com/javase/7/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="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>&gt;&nbsp;sentinels)</pre>
 <div class="block">Remove the sentinels that are marked as finished and the completion time
  has exceeded the removal timeout.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>sentinels</code> - map of sentinels to clean</dd></dl>
@@ -1109,7 +1135,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupCompletedRestoreInMap</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.974">cleanupCompletedRestoreInMap</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.989">cleanupCompletedRestoreInMap</a>()</pre>
 <div class="block">Remove the procedures that are marked as finished</div>
 </li>
 </ul>
@@ -1119,7 +1145,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.991">stop</a>(<a href="http://docs.oracle.com/javase/7/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/snapshot/SnapshotManager.html#line.1006">stop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop(java.lang.String)">Stoppable</a></code></strong></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -1135,7 +1161,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1011">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1026">isStopped</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>
@@ -1148,7 +1174,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSnapshotSupport</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1020">checkSnapshotSupport</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1035">checkSnapshotSupport</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
 <div class="block">Throws an exception if snapshot operations (take a snapshot, restore, clone) are not supported.
  Called at the beginning of snapshot() and restoreSnapshot() methods.</div>
@@ -1162,7 +1188,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSnapshotSupport</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1038">checkSnapshotSupport</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1053">checkSnapshotSupport</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                         <a href="../../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;mfs)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
@@ -1182,7 +1208,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1110">initialize</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1125">initialize</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master,
               <a href="../../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;metricsMaster)
                 throws org.apache.zookeeper.KeeperException,
                        <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -1205,7 +1231,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedureSignature</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1138">getProcedureSignature</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1153">getProcedureSignature</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureManager.html#getProcedureSignature()">ProcedureManager</a></code></strong></div>
 <div class="block">Return the unique signature of the procedure. This signature uniquely
  identifies the procedure. By default, this signature is the string used in
@@ -1222,7 +1248,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>execProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1143">execProcedure</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1158">execProcedure</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManager.html#execProcedure(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription)">MasterProcedureManager</a></code></strong></div>
 <div class="block">Execute a distributed procedure on cluster</div>
@@ -1240,7 +1266,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isProcedureDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1148">isProcedureDone</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1163">isProcedureDone</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManager.html#isProcedureDone(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription)">MasterProcedureManager</a></code></strong></div>
 <div class="block">Check if the procedure is finished successfully</div>
@@ -1256,15 +1282,24 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <a name="toSnapshotDescription(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>toSnapshotDescription</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1152">toSnapshotDescription</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)
+<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html#line.1167">toSnapshotDescription</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription&nbsp;desc)
                                                                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
+<a name="getLocks()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getLocks</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;<a href="http://docs.oracle.com/javase/7/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/master/snapshot/SnapshotManager.html#line.1191">getLocks</a>()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>


[21/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
index 25baad1..20ae1c1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html
@@ -24,14 +24,14 @@
 <span class="sourceLineNo">016</span> */<a name="line.16"></a>
 <span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.17"></a>
 <span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>import java.io.IOException;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.OutputStream;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.HashMap;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.Map;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.26"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.OutputStream;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
 <span class="sourceLineNo">027</span><a name="line.27"></a>
 <span class="sourceLineNo">028</span>/**<a name="line.28"></a>
 <span class="sourceLineNo">029</span> * Provide access to all data block encoding algorithms. All of the algorithms<a name="line.29"></a>
@@ -51,157 +51,158 @@
 <span class="sourceLineNo">043</span>  FAST_DIFF(4, "org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder"),<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  // id 5 is reserved for the COPY_KEY algorithm for benchmarking<a name="line.44"></a>
 <span class="sourceLineNo">045</span>  // COPY_KEY(5, "org.apache.hadoop.hbase.io.encoding.CopyKeyDataBlockEncoder"),<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  PREFIX_TREE(6, "org.apache.hadoop.hbase.codec.prefixtree.PrefixTreeCodec");<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final short id;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private final byte[] idInBytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private DataBlockEncoder encoder;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private final String encoderCls;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  public static final int ID_SIZE = Bytes.SIZEOF_SHORT;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  /** Maps data block encoding ids to enum instances. */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static Map&lt;Short, DataBlockEncoding&gt; idToEncoding =<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      new HashMap&lt;Short, DataBlockEncoding&gt;();<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  static {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    for (DataBlockEncoding algo : values()) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      if (idToEncoding.containsKey(algo.id)) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>        throw new RuntimeException(String.format(<a name="line.62"></a>
-<span class="sourceLineNo">063</span>            "Two data block encoder algorithms '%s' and '%s' have " +<a name="line.63"></a>
-<span class="sourceLineNo">064</span>            "the same id %d",<a name="line.64"></a>
-<span class="sourceLineNo">065</span>            idToEncoding.get(algo.id).toString(), algo.toString(),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>            (int) algo.id));<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      idToEncoding.put(algo.id, algo);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private DataBlockEncoding(int id, String encoderClsName) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    if (id &lt; Short.MIN_VALUE || id &gt; Short.MAX_VALUE) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      throw new AssertionError(<a name="line.74"></a>
-<span class="sourceLineNo">075</span>          "Data block encoding algorithm id is out of range: " + id);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this.id = (short) id;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    this.idInBytes = Bytes.toBytes(this.id);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    if (idInBytes.length != ID_SIZE) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      // White this may seem redundant, if we accidentally serialize<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      // the id as e.g. an int instead of a short, all encoders will break.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      throw new RuntimeException("Unexpected length of encoder ID byte " +<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          "representation: " + Bytes.toStringBinary(idInBytes));<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.encoderCls = encoderClsName;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * @return name converted to bytes.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public byte[] getNameInBytes() {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    return Bytes.toBytes(toString());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @return The id of a data block encoder.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public short getId() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    return id;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  /**<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * Writes id in bytes.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @param stream where the id should be written.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public void writeIdInBytes(OutputStream stream) throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    stream.write(idInBytes);<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">046</span>  PREFIX_TREE(6, "org.apache.hadoop.hbase.codec.prefixtree.PrefixTreeCodec"),<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  ROW_INDEX_V1(7, "org.apache.hadoop.hbase.io.encoding.RowIndexCodecV1");<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final short id;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final byte[] idInBytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private DataBlockEncoder encoder;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private final String encoderCls;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final int ID_SIZE = Bytes.SIZEOF_SHORT;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  /** Maps data block encoding ids to enum instances. */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static Map&lt;Short, DataBlockEncoding&gt; idToEncoding =<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      new HashMap&lt;Short, DataBlockEncoding&gt;();<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  static {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    for (DataBlockEncoding algo : values()) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      if (idToEncoding.containsKey(algo.id)) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>        throw new RuntimeException(String.format(<a name="line.63"></a>
+<span class="sourceLineNo">064</span>            "Two data block encoder algorithms '%s' and '%s' have " +<a name="line.64"></a>
+<span class="sourceLineNo">065</span>            "the same id %d",<a name="line.65"></a>
+<span class="sourceLineNo">066</span>            idToEncoding.get(algo.id).toString(), algo.toString(),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>            (int) algo.id));<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      idToEncoding.put(algo.id, algo);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private DataBlockEncoding(int id, String encoderClsName) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    if (id &lt; Short.MIN_VALUE || id &gt; Short.MAX_VALUE) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      throw new AssertionError(<a name="line.75"></a>
+<span class="sourceLineNo">076</span>          "Data block encoding algorithm id is out of range: " + id);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    this.id = (short) id;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    this.idInBytes = Bytes.toBytes(this.id);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    if (idInBytes.length != ID_SIZE) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      // White this may seem redundant, if we accidentally serialize<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      // the id as e.g. an int instead of a short, all encoders will break.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      throw new RuntimeException("Unexpected length of encoder ID byte " +<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          "representation: " + Bytes.toStringBinary(idInBytes));<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.encoderCls = encoderClsName;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @return name converted to bytes.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public byte[] getNameInBytes() {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    return Bytes.toBytes(toString());<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  /**<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return The id of a data block encoder.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public short getId() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return id;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<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>   * Writes id in bytes.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param stream where the id should be written.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public void writeIdInBytes(OutputStream stream) throws IOException {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    stream.write(idInBytes);<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>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Writes id bytes to the given array starting from offset.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   *<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param dest output array<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param offset starting offset of the output array<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @throws IOException<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void writeIdInBytes(byte[] dest, int offset) throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    System.arraycopy(idInBytes, 0, dest, offset, ID_SIZE);<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>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Return new data block encoder for given algorithm type.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @return data block encoder if algorithm is specified, null if none is<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   *         selected.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public DataBlockEncoder getEncoder() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (encoder == null &amp;&amp; id != 0) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      // lazily create the encoder<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      encoder = createEncoder(encoderCls);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return encoder;<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>  /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * Find and create data block encoder for given id;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param encoderId id of data block encoder.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return Newly created data block encoder.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public static DataBlockEncoder getDataBlockEncoderById(short encoderId) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      throw new IllegalArgumentException(String.format(<a name="line.142"></a>
-<span class="sourceLineNo">143</span>          "There is no data block encoder for given id '%d'",<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          (int) encoderId));<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>    return idToEncoding.get(encoderId).getEncoder();<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Find and return the name of data block encoder for the given id.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @param encoderId id of data block encoder<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @return name, same as used in options in column family<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static String getNameFromId(short encoderId) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    return idToEncoding.get(encoderId).toString();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * Check if given encoder has this id.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param encoder encoder which id will be checked<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param encoderId id which we except<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * @return true if id is right for given encoder, false otherwise<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @exception IllegalArgumentException<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   *            thrown when there is no matching data block encoder<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public static boolean isCorrectEncoder(DataBlockEncoder encoder,<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      short encoderId) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      throw new IllegalArgumentException(String.format(<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          "There is no data block encoder for given id '%d'",<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          (int) encoderId));<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>    DataBlockEncoding algorithm = idToEncoding.get(encoderId);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    String encoderCls = encoder.getClass().getName();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return encoderCls.equals(algorithm.encoderCls);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public static DataBlockEncoding getEncodingById(short dataBlockEncodingId) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return idToEncoding.get(dataBlockEncodingId);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  protected static DataBlockEncoder createEncoder(String fullyQualifiedClassName){<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        return (DataBlockEncoder)Class.forName(fullyQualifiedClassName).newInstance();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      } catch (InstantiationException e) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        throw new RuntimeException(e);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      } catch (IllegalAccessException e) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        throw new RuntimeException(e);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } catch (ClassNotFoundException e) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        throw new IllegalArgumentException(e);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>}<a name="line.196"></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>   * Writes id bytes to the given array starting from offset.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   *<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param dest output array<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param offset starting offset of the output array<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @throws IOException<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public void writeIdInBytes(byte[] dest, int offset) throws IOException {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    System.arraycopy(idInBytes, 0, dest, offset, ID_SIZE);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * Return new data block encoder for given algorithm type.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @return data block encoder if algorithm is specified, null if none is<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   *         selected.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public DataBlockEncoder getEncoder() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (encoder == null &amp;&amp; id != 0) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      // lazily create the encoder<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      encoder = createEncoder(encoderCls);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return encoder;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Find and create data block encoder for given id;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param encoderId id of data block encoder.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return Newly created data block encoder.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public static DataBlockEncoder getDataBlockEncoderById(short encoderId) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      throw new IllegalArgumentException(String.format(<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          "There is no data block encoder for given id '%d'",<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          (int) encoderId));<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>    return idToEncoding.get(encoderId).getEncoder();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Find and return the name of data block encoder for the given id.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param encoderId id of data block encoder<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @return name, same as used in options in column family<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public static String getNameFromId(short encoderId) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return idToEncoding.get(encoderId).toString();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Check if given encoder has this id.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param encoder encoder which id will be checked<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param encoderId id which we except<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @return true if id is right for given encoder, false otherwise<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @exception IllegalArgumentException<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   *            thrown when there is no matching data block encoder<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public static boolean isCorrectEncoder(DataBlockEncoder encoder,<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      short encoderId) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (!idToEncoding.containsKey(encoderId)) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      throw new IllegalArgumentException(String.format(<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          "There is no data block encoder for given id '%d'",<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          (int) encoderId));<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>    DataBlockEncoding algorithm = idToEncoding.get(encoderId);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    String encoderCls = encoder.getClass().getName();<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return encoderCls.equals(algorithm.encoderCls);<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>  public static DataBlockEncoding getEncodingById(short dataBlockEncodingId) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return idToEncoding.get(dataBlockEncodingId);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  protected static DataBlockEncoder createEncoder(String fullyQualifiedClassName){<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        return (DataBlockEncoder)Class.forName(fullyQualifiedClassName).newInstance();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      } catch (InstantiationException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        throw new RuntimeException(e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      } catch (IllegalAccessException e) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        throw new RuntimeException(e);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      } catch (ClassNotFoundException e) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        throw new IllegalArgumentException(e);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>}<a name="line.197"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffCompressionState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffCompressionState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffCompressionState.html
index 54788f6..e372d03 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffCompressionState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.DiffCompressionState.html
@@ -375,167 +375,169 @@
 <span class="sourceLineNo">367</span>    private int rowLengthWithSize;<a name="line.367"></a>
 <span class="sourceLineNo">368</span>    private long timestamp;<a name="line.368"></a>
 <span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      super(tmpPair, includeTags);<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>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    protected void copyFromNext(SeekerState that) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      super.copyFromNext(that);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      DiffSeekerState other = (DiffSeekerState) that;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      timestamp = other.timestamp;<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><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @Override<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new BufferedEncodedSeeker&lt;DiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      private byte[] familyNameWithSize;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      private static final int TIMESTAMP_WITH_TYPE_LENGTH =<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          Bytes.SIZEOF_LONG + Bytes.SIZEOF_BYTE;<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>      private void decode(boolean isFirst) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        byte flag = currentBuffer.get();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        byte type = 0;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          if (!isFirst) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            type = current.keyBuffer[current.keyLength - Bytes.SIZEOF_BYTE];<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>        current.ensureSpaceForKey();<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>        if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          // length of row is different, copy everything except family<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>          // copy the row size<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.411"></a>
-<span class="sourceLineNo">412</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.413"></a>
-<span class="sourceLineNo">414</span>              Bytes.SIZEOF_SHORT;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>          // copy the rest of row<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.417"></a>
-<span class="sourceLineNo">418</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // copy the column family<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          System.arraycopy(familyNameWithSize, 0, current.keyBuffer,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              current.rowLengthWithSize, familyNameWithSize.length);<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // copy the qualifier<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          currentBuffer.get(current.keyBuffer,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              current.keyLength - current.rowLengthWithSize -<a name="line.427"></a>
-<span class="sourceLineNo">428</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          // we have to copy part of row and qualifier,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          // but column family is in right place<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>          // before column family (rest of row)<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // after column family (qualifier)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          currentBuffer.get(current.keyBuffer,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              current.keyLength - current.rowLengthWithSize -<a name="line.440"></a>
-<span class="sourceLineNo">441</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        } else {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          // copy just the ending<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>              current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH -<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              current.lastCommonPrefix);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>        // timestamp<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        int pos = current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        int timestampFitInBytes = 1 +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>            ((flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt; SHIFT_TIMESTAMP_LENGTH);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        long timestampOrDiff = ByteBuff.readLong(currentBuffer, timestampFitInBytes);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        if ((flag &amp; FLAG_TIMESTAMP_SIGN) != 0) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          timestampOrDiff = -timestampOrDiff;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        if ((flag &amp; FLAG_TIMESTAMP_IS_DIFF) == 0) { // it is timestamp<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          current.timestamp = timestampOrDiff;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        } else { // it is diff<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          current.timestamp = current.timestamp - timestampOrDiff;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        Bytes.putLong(current.keyBuffer, pos, current.timestamp);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        pos += Bytes.SIZEOF_LONG;<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        // type<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          current.keyBuffer[pos] = type;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>        current.valueOffset = currentBuffer.position();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        currentBuffer.skip(current.valueLength);<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>        if (includesTags()) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          decodeTags();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        if (includesMvcc()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          current.memstoreTS = 0;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      protected void decodeFirst() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>        // read column family<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        byte familyNameLength = currentBuffer.get();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        familyNameWithSize = new byte[familyNameLength + Bytes.SIZEOF_BYTE];<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        familyNameWithSize[0] = familyNameLength;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        currentBuffer.get(familyNameWithSize, Bytes.SIZEOF_BYTE,<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            familyNameLength);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        decode(true);<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>      @Override<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      protected void decodeNext() {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        decode(false);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>      @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      protected DiffSeekerState createSeekerState() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        return new DiffSeekerState(this.tmpPair, this.includesTags());<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>  }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    int decompressedSize = source.readInt();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    ByteBuffer buffer = ByteBuffer.allocate(decompressedSize +<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        allocateHeaderLength);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    buffer.position(allocateHeaderLength);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    DiffCompressionState state = new DiffCompressionState();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    while (source.available() &gt; skipLastBytes) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      uncompressSingleKeyValue(source, buffer, state);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      afterDecodingKeyValue(source, buffer, decodingCtx);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (source.available() != skipLastBytes) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      throw new IllegalStateException("Read too much bytes.");<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return buffer;<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">370</span>    public DiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        boolean includeTags, boolean tagsCompressed) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      super(tmpPair, includeTags, tagsCompressed);<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>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    protected void copyFromNext(SeekerState that) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      super.copyFromNext(that);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      DiffSeekerState other = (DiffSeekerState) that;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      timestamp = other.timestamp;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  @Override<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return new BufferedEncodedSeeker&lt;DiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      private byte[] familyNameWithSize;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      private static final int TIMESTAMP_WITH_TYPE_LENGTH =<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          Bytes.SIZEOF_LONG + Bytes.SIZEOF_BYTE;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>      private void decode(boolean isFirst) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        byte flag = currentBuffer.get();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        byte type = 0;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          if (!isFirst) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            type = current.keyBuffer[current.keyLength - Bytes.SIZEOF_BYTE];<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>        current.ensureSpaceForKey();<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>        if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          // length of row is different, copy everything except family<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>          // copy the row size<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.412"></a>
+<span class="sourceLineNo">413</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.414"></a>
+<span class="sourceLineNo">415</span>              Bytes.SIZEOF_SHORT;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>          // copy the rest of row<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.418"></a>
+<span class="sourceLineNo">419</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // copy the column family<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          System.arraycopy(familyNameWithSize, 0, current.keyBuffer,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>              current.rowLengthWithSize, familyNameWithSize.length);<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>          // copy the qualifier<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          currentBuffer.get(current.keyBuffer,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.427"></a>
+<span class="sourceLineNo">428</span>              current.keyLength - current.rowLengthWithSize -<a name="line.428"></a>
+<span class="sourceLineNo">429</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          // we have to copy part of row and qualifier,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          // but column family is in right place<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span>          // before column family (rest of row)<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // after column family (qualifier)<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          currentBuffer.get(current.keyBuffer,<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              current.rowLengthWithSize + familyNameWithSize.length,<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              current.keyLength - current.rowLengthWithSize -<a name="line.441"></a>
+<span class="sourceLineNo">442</span>              familyNameWithSize.length - TIMESTAMP_WITH_TYPE_LENGTH);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        } else {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          // copy just the ending<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.445"></a>
+<span class="sourceLineNo">446</span>              current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH -<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              current.lastCommonPrefix);<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>        // timestamp<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        int pos = current.keyLength - TIMESTAMP_WITH_TYPE_LENGTH;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        int timestampFitInBytes = 1 +<a name="line.452"></a>
+<span class="sourceLineNo">453</span>            ((flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt; SHIFT_TIMESTAMP_LENGTH);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        long timestampOrDiff = ByteBuff.readLong(currentBuffer, timestampFitInBytes);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        if ((flag &amp; FLAG_TIMESTAMP_SIGN) != 0) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          timestampOrDiff = -timestampOrDiff;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        if ((flag &amp; FLAG_TIMESTAMP_IS_DIFF) == 0) { // it is timestamp<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          current.timestamp = timestampOrDiff;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        } else { // it is diff<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          current.timestamp = current.timestamp - timestampOrDiff;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>        }<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        Bytes.putLong(current.keyBuffer, pos, current.timestamp);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        pos += Bytes.SIZEOF_LONG;<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        // type<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          current.keyBuffer[pos] = type;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        }<a name="line.471"></a>
+<span class="sourceLineNo">472</span><a name="line.472"></a>
+<span class="sourceLineNo">473</span>        current.valueOffset = currentBuffer.position();<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        currentBuffer.skip(current.valueLength);<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>        if (includesTags()) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          decodeTags();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        if (includesMvcc()) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>          current.memstoreTS = 0;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      protected void decodeFirst() {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>        // read column family<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        byte familyNameLength = currentBuffer.get();<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        familyNameWithSize = new byte[familyNameLength + Bytes.SIZEOF_BYTE];<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        familyNameWithSize[0] = familyNameLength;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>        currentBuffer.get(familyNameWithSize, Bytes.SIZEOF_BYTE,<a name="line.495"></a>
+<span class="sourceLineNo">496</span>            familyNameLength);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        decode(true);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>      @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      protected void decodeNext() {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        decode(false);<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>      @Override<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      protected DiffSeekerState createSeekerState() {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        return new DiffSeekerState(this.tmpPair, this.includesTags(),<a name="line.507"></a>
+<span class="sourceLineNo">508</span>            this.tagsCompressed());<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    };<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  @Override<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength,<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    int decompressedSize = source.readInt();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    ByteBuffer buffer = ByteBuffer.allocate(decompressedSize +<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        allocateHeaderLength);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    buffer.position(allocateHeaderLength);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    DiffCompressionState state = new DiffCompressionState();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    while (source.available() &gt; skipLastBytes) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      uncompressSingleKeyValue(source, buffer, state);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      afterDecodingKeyValue(source, buffer, decodingCtx);<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>    if (source.available() != skipLastBytes) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      throw new IllegalStateException("Read too much bytes.");<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    return buffer;<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>
 
 
 


[33/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html
new file mode 100644
index 0000000..66e5152
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>HeapMemoryManager.HeapMemoryTuneObserver (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="HeapMemoryManager.HeapMemoryTuneObserver (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/HeapMemoryManager.HeapMemoryTuneObserver.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">Frames</a></li>
+<li><a href="HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver</div>
+<h2 title="Interface HeapMemoryManager.HeapMemoryTuneObserver" class="title">Interface HeapMemoryManager.HeapMemoryTuneObserver</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Known Implementing Classes:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreChunkPool</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.507">HeapMemoryManager.HeapMemoryTuneObserver</a></pre>
+<div class="block">Every class that wants to observe heap memory tune actions must implement this interface.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html#onHeapMemoryTune(long,%20long)">onHeapMemoryTune</a></strong>(long&nbsp;newMemstoreSize,
+                                long&nbsp;newBlockCacheSize)</code>
+<div class="block">This method would be called by HeapMemoryManger when a heap memory tune action took place.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="onHeapMemoryTune(long, long)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>onHeapMemoryTune</h4>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html#line.514">onHeapMemoryTune</a>(long&nbsp;newMemstoreSize,
+                    long&nbsp;newBlockCacheSize)</pre>
+<div class="block">This method would be called by HeapMemoryManger when a heap memory tune action took place.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>newMemstoreSize</code> - The newly calculated global memstore size</dd><dd><code>newBlockCacheSize</code> - The newly calculated global blockcache size</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/HeapMemoryManager.HeapMemoryTuneObserver.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">Frames</a></li>
+<li><a href="HeapMemoryManager.HeapMemoryTuneObserver.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html
index 7c2c460..248c400 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.221">HeapMemoryManager.HeapMemoryTunerChore</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.229">HeapMemoryManager.HeapMemoryTunerChore</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a></pre>
 </li>
@@ -241,7 +241,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>heapMemTuner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryTuner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.222">heapMemTuner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryTuner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.230">heapMemTuner</a></pre>
 </li>
 </ul>
 <a name="blockedFlushCount">
@@ -250,7 +250,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>blockedFlushCount</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.223">blockedFlushCount</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.231">blockedFlushCount</a></pre>
 </li>
 </ul>
 <a name="unblockedFlushCount">
@@ -259,7 +259,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>unblockedFlushCount</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.224">unblockedFlushCount</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.232">unblockedFlushCount</a></pre>
 </li>
 </ul>
 <a name="evictCount">
@@ -268,7 +268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>evictCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.225">evictCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.233">evictCount</a></pre>
 </li>
 </ul>
 <a name="cacheMissCount">
@@ -277,7 +277,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheMissCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.226">cacheMissCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.234">cacheMissCount</a></pre>
 </li>
 </ul>
 <a name="tunerContext">
@@ -286,7 +286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>tunerContext</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.227">tunerContext</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.235">tunerContext</a></pre>
 </li>
 </ul>
 <a name="alarming">
@@ -295,7 +295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockListLast">
 <li class="blockList">
 <h4>alarming</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.228">alarming</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.236">alarming</a></pre>
 </li>
 </ul>
 </li>
@@ -312,7 +312,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HeapMemoryManager.HeapMemoryTunerChore</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.230">HeapMemoryManager.HeapMemoryTunerChore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.238">HeapMemoryManager.HeapMemoryTunerChore</a>()</pre>
 </li>
 </ul>
 </li>
@@ -329,7 +329,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.238">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.246">chore</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore()">ScheduledChore</a></code></strong></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
@@ -344,7 +344,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>tune</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.274">tune</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.282">tune</a>()</pre>
 </li>
 </ul>
 <a name="flushRequested(org.apache.hadoop.hbase.regionserver.FlushType, org.apache.hadoop.hbase.regionserver.Region)">
@@ -353,7 +353,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockListLast">
 <li class="blockList">
 <h4>flushRequested</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.364">flushRequested</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;type,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html#line.375">flushRequested</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;type,
                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html#flushRequested(org.apache.hadoop.hbase.regionserver.FlushType,%20org.apache.hadoop.hbase.regionserver.Region)">FlushRequestListener</a></code></strong></div>
 <div class="block">Callback which will get called when a flush request is made for a region.</div>
@@ -389,7 +389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html
index 60e0ec5..77c7703 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.384">HeapMemoryManager.TunerContext</a>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.395">HeapMemoryManager.TunerContext</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">POJO to pass all the relevant information required to do the heap memory tuning. It holds the
  flush counts and block cache evictions happened within the interval. Also holds the current
@@ -278,7 +278,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blockedFlushCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.385">blockedFlushCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.396">blockedFlushCount</a></pre>
 </li>
 </ul>
 <a name="unblockedFlushCount">
@@ -287,7 +287,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unblockedFlushCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.386">unblockedFlushCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.397">unblockedFlushCount</a></pre>
 </li>
 </ul>
 <a name="evictCount">
@@ -296,7 +296,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>evictCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.387">evictCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.398">evictCount</a></pre>
 </li>
 </ul>
 <a name="cacheMissCount">
@@ -305,7 +305,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheMissCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.388">cacheMissCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.399">cacheMissCount</a></pre>
 </li>
 </ul>
 <a name="curBlockCacheUsed">
@@ -314,7 +314,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>curBlockCacheUsed</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.389">curBlockCacheUsed</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.400">curBlockCacheUsed</a></pre>
 </li>
 </ul>
 <a name="curMemStoreUsed">
@@ -323,7 +323,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>curMemStoreUsed</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.390">curMemStoreUsed</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.401">curMemStoreUsed</a></pre>
 </li>
 </ul>
 <a name="curMemStoreSize">
@@ -332,7 +332,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>curMemStoreSize</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.391">curMemStoreSize</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.402">curMemStoreSize</a></pre>
 </li>
 </ul>
 <a name="curBlockCacheSize">
@@ -341,7 +341,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>curBlockCacheSize</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.392">curBlockCacheSize</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.403">curBlockCacheSize</a></pre>
 </li>
 </ul>
 </li>
@@ -358,7 +358,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HeapMemoryManager.TunerContext</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.384">HeapMemoryManager.TunerContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.395">HeapMemoryManager.TunerContext</a>()</pre>
 </li>
 </ul>
 </li>
@@ -375,7 +375,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockedFlushCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.394">getBlockedFlushCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.405">getBlockedFlushCount</a>()</pre>
 </li>
 </ul>
 <a name="setBlockedFlushCount(long)">
@@ -384,7 +384,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setBlockedFlushCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.398">setBlockedFlushCount</a>(long&nbsp;blockedFlushCount)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.409">setBlockedFlushCount</a>(long&nbsp;blockedFlushCount)</pre>
 </li>
 </ul>
 <a name="getUnblockedFlushCount()">
@@ -393,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getUnblockedFlushCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.402">getUnblockedFlushCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.413">getUnblockedFlushCount</a>()</pre>
 </li>
 </ul>
 <a name="setUnblockedFlushCount(long)">
@@ -402,7 +402,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUnblockedFlushCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.406">setUnblockedFlushCount</a>(long&nbsp;unblockedFlushCount)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.417">setUnblockedFlushCount</a>(long&nbsp;unblockedFlushCount)</pre>
 </li>
 </ul>
 <a name="getEvictCount()">
@@ -411,7 +411,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getEvictCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.410">getEvictCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.421">getEvictCount</a>()</pre>
 </li>
 </ul>
 <a name="setEvictCount(long)">
@@ -420,7 +420,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setEvictCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.414">setEvictCount</a>(long&nbsp;evictCount)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.425">setEvictCount</a>(long&nbsp;evictCount)</pre>
 </li>
 </ul>
 <a name="getCurMemStoreSize()">
@@ -429,7 +429,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurMemStoreSize</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.418">getCurMemStoreSize</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.429">getCurMemStoreSize</a>()</pre>
 </li>
 </ul>
 <a name="setCurMemStoreSize(float)">
@@ -438,7 +438,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setCurMemStoreSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.422">setCurMemStoreSize</a>(float&nbsp;curMemStoreSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.433">setCurMemStoreSize</a>(float&nbsp;curMemStoreSize)</pre>
 </li>
 </ul>
 <a name="getCurBlockCacheSize()">
@@ -447,7 +447,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurBlockCacheSize</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.426">getCurBlockCacheSize</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.437">getCurBlockCacheSize</a>()</pre>
 </li>
 </ul>
 <a name="setCurBlockCacheSize(float)">
@@ -456,7 +456,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setCurBlockCacheSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.430">setCurBlockCacheSize</a>(float&nbsp;curBlockCacheSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.441">setCurBlockCacheSize</a>(float&nbsp;curBlockCacheSize)</pre>
 </li>
 </ul>
 <a name="getCacheMissCount()">
@@ -465,7 +465,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.434">getCacheMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.445">getCacheMissCount</a>()</pre>
 </li>
 </ul>
 <a name="setCacheMissCount(long)">
@@ -474,7 +474,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setCacheMissCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.438">setCacheMissCount</a>(long&nbsp;cacheMissCount)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.449">setCacheMissCount</a>(long&nbsp;cacheMissCount)</pre>
 </li>
 </ul>
 <a name="getCurBlockCacheUsed()">
@@ -483,7 +483,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurBlockCacheUsed</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.442">getCurBlockCacheUsed</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.453">getCurBlockCacheUsed</a>()</pre>
 </li>
 </ul>
 <a name="setCurBlockCacheUsed(float)">
@@ -492,7 +492,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setCurBlockCacheUsed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.446">setCurBlockCacheUsed</a>(float&nbsp;curBlockCacheUsed)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.457">setCurBlockCacheUsed</a>(float&nbsp;curBlockCacheUsed)</pre>
 </li>
 </ul>
 <a name="getCurMemStoreUsed()">
@@ -501,7 +501,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurMemStoreUsed</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.450">getCurMemStoreUsed</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.461">getCurMemStoreUsed</a>()</pre>
 </li>
 </ul>
 <a name="setCurMemStoreUsed(float)">
@@ -510,7 +510,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setCurMemStoreUsed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.454">setCurMemStoreUsed</a>(float&nbsp;d)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#line.465">setCurMemStoreUsed</a>(float&nbsp;d)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html
index 65eb701..a2cbf03 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.463">HeapMemoryManager.TunerResult</a>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.474">HeapMemoryManager.TunerResult</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">POJO which holds the result of memory tuning done by HeapMemoryTuner implementation.
  It includes the new heap percentage for memstore and block cache.</div>
@@ -213,7 +213,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>memstoreSize</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.464">memstoreSize</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.475">memstoreSize</a></pre>
 </li>
 </ul>
 <a name="blockCacheSize">
@@ -222,7 +222,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCacheSize</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.465">blockCacheSize</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.476">blockCacheSize</a></pre>
 </li>
 </ul>
 <a name="needsTuning">
@@ -231,7 +231,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>needsTuning</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.466">needsTuning</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.477">needsTuning</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HeapMemoryManager.TunerResult</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.468">HeapMemoryManager.TunerResult</a>(boolean&nbsp;needsTuning)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.479">HeapMemoryManager.TunerResult</a>(boolean&nbsp;needsTuning)</pre>
 </li>
 </ul>
 </li>
@@ -265,7 +265,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemstoreSize</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.472">getMemstoreSize</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.483">getMemstoreSize</a>()</pre>
 </li>
 </ul>
 <a name="setMemstoreSize(float)">
@@ -274,7 +274,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setMemstoreSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.476">setMemstoreSize</a>(float&nbsp;memstoreSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.487">setMemstoreSize</a>(float&nbsp;memstoreSize)</pre>
 </li>
 </ul>
 <a name="getBlockCacheSize()">
@@ -283,7 +283,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheSize</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.480">getBlockCacheSize</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.491">getBlockCacheSize</a>()</pre>
 </li>
 </ul>
 <a name="setBlockCacheSize(float)">
@@ -292,7 +292,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setBlockCacheSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.484">setBlockCacheSize</a>(float&nbsp;blockCacheSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.495">setBlockCacheSize</a>(float&nbsp;blockCacheSize)</pre>
 </li>
 </ul>
 <a name="needsTuning()">
@@ -301,7 +301,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>needsTuning</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.488">needsTuning</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html#line.499">needsTuning</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html
index 05df909..a6990c6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" target="_top">Frames</a></li>
@@ -96,7 +96,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.47">HeapMemoryManager</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.49">HeapMemoryManager</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Manages tuning of Heap memory using <code>HeapMemoryTuner</code>.</div>
 </li>
@@ -118,16 +118,22 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Class and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>static interface&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></strong></code>
+<div class="block">Every class that wants to observe heap memory tune actions must implement this interface.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerContext</a></strong></code>
 <div class="block">POJO to pass all the relevant information required to do the heap memory tuning.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerResult.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerResult</a></strong></code>
 <div class="block">POJO which holds the result of memory tuning done by HeapMemoryTuner implementation.</div>
@@ -257,6 +263,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#server">server</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/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/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#tuneObservers">tuneObservers</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#tunerOn">tunerOn</a></strong></code>&nbsp;</td>
 </tr>
@@ -316,10 +326,14 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#start(org.apache.hadoop.hbase.ChoreService)">start</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;service)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#registerTuneObserver(org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver)">registerTuneObserver</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>&nbsp;observer)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#start(org.apache.hadoop.hbase.ChoreService)">start</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;service)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#stop()">stop</a></strong>()</code>&nbsp;</td>
 </tr>
 </table>
@@ -350,7 +364,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.48">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.50">LOG</a></pre>
 </li>
 </ul>
 <a name="CONVERT_TO_PERCENTAGE">
@@ -359,7 +373,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>CONVERT_TO_PERCENTAGE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.49">CONVERT_TO_PERCENTAGE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.51">CONVERT_TO_PERCENTAGE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.CONVERT_TO_PERCENTAGE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -369,7 +383,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>CLUSTER_MINIMUM_MEMORY_THRESHOLD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.50">CLUSTER_MINIMUM_MEMORY_THRESHOLD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.52">CLUSTER_MINIMUM_MEMORY_THRESHOLD</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.CLUSTER_MINIMUM_MEMORY_THRESHOLD">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -379,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_SIZE_MAX_RANGE_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.53">BLOCK_CACHE_SIZE_MAX_RANGE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.55">BLOCK_CACHE_SIZE_MAX_RANGE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.BLOCK_CACHE_SIZE_MAX_RANGE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -389,7 +403,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_SIZE_MIN_RANGE_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.54">BLOCK_CACHE_SIZE_MIN_RANGE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.56">BLOCK_CACHE_SIZE_MIN_RANGE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.BLOCK_CACHE_SIZE_MIN_RANGE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -399,7 +413,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>MEMSTORE_SIZE_MAX_RANGE_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.55">MEMSTORE_SIZE_MAX_RANGE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.57">MEMSTORE_SIZE_MAX_RANGE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.MEMSTORE_SIZE_MAX_RANGE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -409,7 +423,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>MEMSTORE_SIZE_MIN_RANGE_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.57">MEMSTORE_SIZE_MIN_RANGE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.59">MEMSTORE_SIZE_MIN_RANGE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.MEMSTORE_SIZE_MIN_RANGE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -419,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_RS_HEAP_MEMORY_TUNER_PERIOD</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.59">HBASE_RS_HEAP_MEMORY_TUNER_PERIOD</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.61">HBASE_RS_HEAP_MEMORY_TUNER_PERIOD</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HBASE_RS_HEAP_MEMORY_TUNER_PERIOD">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -429,7 +443,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_RS_HEAP_MEMORY_TUNER_DEFAULT_PERIOD</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.61">HBASE_RS_HEAP_MEMORY_TUNER_DEFAULT_PERIOD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.63">HBASE_RS_HEAP_MEMORY_TUNER_DEFAULT_PERIOD</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HBASE_RS_HEAP_MEMORY_TUNER_DEFAULT_PERIOD">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -439,7 +453,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_RS_HEAP_MEMORY_TUNER_CLASS</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.62">HBASE_RS_HEAP_MEMORY_TUNER_CLASS</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.64">HBASE_RS_HEAP_MEMORY_TUNER_CLASS</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HBASE_RS_HEAP_MEMORY_TUNER_CLASS">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -449,7 +463,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>globalMemStorePercent</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.65">globalMemStorePercent</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.67">globalMemStorePercent</a></pre>
 </li>
 </ul>
 <a name="globalMemStorePercentMinRange">
@@ -458,7 +472,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>globalMemStorePercentMinRange</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.66">globalMemStorePercentMinRange</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.68">globalMemStorePercentMinRange</a></pre>
 </li>
 </ul>
 <a name="globalMemStorePercentMaxRange">
@@ -467,7 +481,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>globalMemStorePercentMaxRange</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.67">globalMemStorePercentMaxRange</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.69">globalMemStorePercentMaxRange</a></pre>
 </li>
 </ul>
 <a name="blockCachePercent">
@@ -476,7 +490,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCachePercent</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.69">blockCachePercent</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.71">blockCachePercent</a></pre>
 </li>
 </ul>
 <a name="blockCachePercentMinRange">
@@ -485,7 +499,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCachePercentMinRange</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.70">blockCachePercentMinRange</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.72">blockCachePercentMinRange</a></pre>
 </li>
 </ul>
 <a name="blockCachePercentMaxRange">
@@ -494,7 +508,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCachePercentMaxRange</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.71">blockCachePercentMaxRange</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.73">blockCachePercentMaxRange</a></pre>
 </li>
 </ul>
 <a name="l2BlockCachePercent">
@@ -503,7 +517,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>l2BlockCachePercent</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.72">l2BlockCachePercent</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.74">l2BlockCachePercent</a></pre>
 </li>
 </ul>
 <a name="heapOccupancyPercent">
@@ -512,7 +526,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>heapOccupancyPercent</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.74">heapOccupancyPercent</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.76">heapOccupancyPercent</a></pre>
 </li>
 </ul>
 <a name="blockCache">
@@ -521,7 +535,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCache</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">ResizableBlockCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.76">blockCache</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">ResizableBlockCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.78">blockCache</a></pre>
 </li>
 </ul>
 <a name="memStoreFlusher">
@@ -530,7 +544,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreFlusher</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.77">memStoreFlusher</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.79">memStoreFlusher</a></pre>
 </li>
 </ul>
 <a name="server">
@@ -539,7 +553,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.78">server</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.80">server</a></pre>
 </li>
 </ul>
 <a name="regionServerAccounting">
@@ -548,7 +562,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerAccounting</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.79">regionServerAccounting</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.81">regionServerAccounting</a></pre>
 </li>
 </ul>
 <a name="heapMemTunerChore">
@@ -557,7 +571,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>heapMemTunerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.81">heapMemTunerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.83">heapMemTunerChore</a></pre>
 </li>
 </ul>
 <a name="tunerOn">
@@ -566,7 +580,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tunerOn</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.82">tunerOn</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.84">tunerOn</a></pre>
 </li>
 </ul>
 <a name="defaultChorePeriod">
@@ -575,7 +589,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>defaultChorePeriod</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.83">defaultChorePeriod</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.85">defaultChorePeriod</a></pre>
 </li>
 </ul>
 <a name="heapOccupancyLowWatermark">
@@ -584,7 +598,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>heapOccupancyLowWatermark</h4>
-<pre>private final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.84">heapOccupancyLowWatermark</a></pre>
+<pre>private final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.86">heapOccupancyLowWatermark</a></pre>
 </li>
 </ul>
 <a name="maxHeapSize">
@@ -593,16 +607,25 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>maxHeapSize</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.86">maxHeapSize</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.88">maxHeapSize</a></pre>
 </li>
 </ul>
 <a name="metricsHeapMemoryManager">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>metricsHeapMemoryManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsHeapMemoryManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.88">metricsHeapMemoryManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsHeapMemoryManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.90">metricsHeapMemoryManager</a></pre>
+</li>
+</ul>
+<a name="tuneObservers">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>tuneObservers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.92">tuneObservers</a></pre>
 </li>
 </ul>
 </li>
@@ -619,7 +642,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HeapMemoryManager</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.101">HeapMemoryManager</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">ResizableBlockCache</a>&nbsp;blockCache,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.105">HeapMemoryManager</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">ResizableBlockCache</a>&nbsp;blockCache,
                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;memStoreFlusher,
                  <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;regionServerAccounting)</pre>
@@ -639,7 +662,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.90">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.94">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;memStoreFlusher,
                        <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;regionServerAccounting)</pre>
@@ -651,7 +674,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doInit</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.116">doInit</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.120">doInit</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="start(org.apache.hadoop.hbase.ChoreService)">
@@ -660,7 +683,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.193">start</a>(<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;service)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.197">start</a>(<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;service)</pre>
 </li>
 </ul>
 <a name="stop()">
@@ -669,7 +692,16 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.203">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.207">stop</a>()</pre>
+</li>
+</ul>
+<a name="registerTuneObserver(org.apache.hadoop.hbase.regionserver.HeapMemoryManager.HeapMemoryTuneObserver)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>registerTuneObserver</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.213">registerTuneObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a>&nbsp;observer)</pre>
 </li>
 </ul>
 <a name="isTunerOn()">
@@ -678,7 +710,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isTunerOn</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.210">isTunerOn</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.218">isTunerOn</a>()</pre>
 </li>
 </ul>
 <a name="getHeapOccupancyPercent()">
@@ -687,7 +719,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getHeapOccupancyPercent</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.217">getHeapOccupancyPercent</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#line.225">getHeapOccupancyPercent</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>heap occupancy percentage, 0 &lt;= n &lt;= 1</dd></dl>
 </li>
 </ul>
@@ -718,7 +750,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" target="_top">Frames</a></li>


[18/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
index 81bd916..b58512b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html
@@ -386,152 +386,154 @@
 <span class="sourceLineNo">378</span>    private int rowLengthWithSize;<a name="line.378"></a>
 <span class="sourceLineNo">379</span>    private int familyLengthWithSize;<a name="line.379"></a>
 <span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    public FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair, boolean includeTags) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      super(tmpPair, includeTags);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void copyFromNext(SeekerState that) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      super.copyFromNext(that);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      FastDiffSeekerState other = (FastDiffSeekerState) that;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      System.arraycopy(other.prevTimestampAndType, 0,<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          prevTimestampAndType, 0,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          KeyValue.TIMESTAMP_TYPE_SIZE);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      familyLengthWithSize = other.familyLengthWithSize;<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><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      final HFileBlockDecodingContext decodingCtx) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    return new BufferedEncodedSeeker&lt;FastDiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      private void decode(boolean isFirst) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        byte flag = currentBuffer.get();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          if (!isFirst) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>            System.arraycopy(current.keyBuffer,<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                current.keyLength - current.prevTimestampAndType.length,<a name="line.406"></a>
-<span class="sourceLineNo">407</span>                current.prevTimestampAndType, 0,<a name="line.407"></a>
-<span class="sourceLineNo">408</span>                current.prevTimestampAndType.length);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>        current.ensureSpaceForKey();<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>        if (isFirst) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // copy everything<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              current.keyLength - current.prevTimestampAndType.length);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              Bytes.SIZEOF_SHORT;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          current.familyLengthWithSize =<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              current.keyBuffer[current.rowLengthWithSize] + Bytes.SIZEOF_BYTE;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        } else if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // length of row is different, copy everything except family<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>          // copy the row size<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          int oldRowLengthWithSize = current.rowLengthWithSize;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.432"></a>
-<span class="sourceLineNo">433</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              Bytes.SIZEOF_SHORT;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // move the column family<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          System.arraycopy(current.keyBuffer, oldRowLengthWithSize,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              current.keyBuffer, current.rowLengthWithSize,<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              current.familyLengthWithSize);<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>          // copy the rest of row<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>          // copy the qualifier<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.447"></a>
-<span class="sourceLineNo">448</span>              + current.familyLengthWithSize, current.keyLength<a name="line.448"></a>
-<span class="sourceLineNo">449</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.449"></a>
-<span class="sourceLineNo">450</span>              - current.prevTimestampAndType.length);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          // We have to copy part of row and qualifier, but the column family<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          // is in the right place.<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // before column family (rest of row)<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // after column family (qualifier)<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.460"></a>
-<span class="sourceLineNo">461</span>              + current.familyLengthWithSize, current.keyLength<a name="line.461"></a>
-<span class="sourceLineNo">462</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              - current.prevTimestampAndType.length);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          // copy just the ending<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              current.keyLength - current.prevTimestampAndType.length<a name="line.467"></a>
-<span class="sourceLineNo">468</span>                  - current.lastCommonPrefix);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // timestamp<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        int pos = current.keyLength - current.prevTimestampAndType.length;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        int commonTimestampPrefix = (flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          SHIFT_TIMESTAMP_LENGTH;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          System.arraycopy(current.prevTimestampAndType, 0, current.keyBuffer,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>              pos, commonTimestampPrefix);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        pos += commonTimestampPrefix;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        currentBuffer.get(current.keyBuffer, pos,<a name="line.480"></a>
-<span class="sourceLineNo">481</span>            Bytes.SIZEOF_LONG - commonTimestampPrefix);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        pos += Bytes.SIZEOF_LONG - commonTimestampPrefix;<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>        // type<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          current.keyBuffer[pos] =<a name="line.488"></a>
-<span class="sourceLineNo">489</span>              current.prevTimestampAndType[Bytes.SIZEOF_LONG];<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>        // handle value<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        if ((flag &amp; FLAG_SAME_VALUE) == 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          current.valueOffset = currentBuffer.position();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          currentBuffer.skip(current.valueLength);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>        if (includesTags()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          decodeTags();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        if (includesMvcc()) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          current.memstoreTS = 0;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        current.nextKvOffset = currentBuffer.position();<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>      @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      protected void decodeFirst() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        decode(true);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      protected void decodeNext() {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        decode(false);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>      @Override<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      protected FastDiffSeekerState createSeekerState() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        return new FastDiffSeekerState(this.tmpPair, this.includesTags());<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      }<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>}<a name="line.526"></a>
+<span class="sourceLineNo">381</span>    public FastDiffSeekerState(ObjectIntPair&lt;ByteBuffer&gt; tmpPair,<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        boolean includeTags, boolean tagsCompressed) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      super(tmpPair, includeTags, tagsCompressed);<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>    @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    protected void copyFromNext(SeekerState that) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      super.copyFromNext(that);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      FastDiffSeekerState other = (FastDiffSeekerState) that;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      System.arraycopy(other.prevTimestampAndType, 0,<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          prevTimestampAndType, 0,<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          KeyValue.TIMESTAMP_TYPE_SIZE);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      rowLengthWithSize = other.rowLengthWithSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      familyLengthWithSize = other.familyLengthWithSize;<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>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      final HFileBlockDecodingContext decodingCtx) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new BufferedEncodedSeeker&lt;FastDiffSeekerState&gt;(comparator, decodingCtx) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      private void decode(boolean isFirst) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        byte flag = currentBuffer.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          if (!isFirst) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>            System.arraycopy(current.keyBuffer,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>                current.keyLength - current.prevTimestampAndType.length,<a name="line.407"></a>
+<span class="sourceLineNo">408</span>                current.prevTimestampAndType, 0,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>                current.prevTimestampAndType.length);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          current.keyLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        if ((flag &amp; FLAG_SAME_VALUE_LENGTH) == 0) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          current.valueLength = ByteBuff.readCompressedInt(currentBuffer);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        current.lastCommonPrefix = ByteBuff.readCompressedInt(currentBuffer);<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>        current.ensureSpaceForKey();<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>        if (isFirst) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // copy everything<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>              current.keyLength - current.prevTimestampAndType.length);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.424"></a>
+<span class="sourceLineNo">425</span>              Bytes.SIZEOF_SHORT;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          current.familyLengthWithSize =<a name="line.426"></a>
+<span class="sourceLineNo">427</span>              current.keyBuffer[current.rowLengthWithSize] + Bytes.SIZEOF_BYTE;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        } else if (current.lastCommonPrefix &lt; Bytes.SIZEOF_SHORT) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // length of row is different, copy everything except family<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>          // copy the row size<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          int oldRowLengthWithSize = current.rowLengthWithSize;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.433"></a>
+<span class="sourceLineNo">434</span>              Bytes.SIZEOF_SHORT - current.lastCommonPrefix);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          current.rowLengthWithSize = Bytes.toShort(current.keyBuffer, 0) +<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              Bytes.SIZEOF_SHORT;<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>          // move the column family<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          System.arraycopy(current.keyBuffer, oldRowLengthWithSize,<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              current.keyBuffer, current.rowLengthWithSize,<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              current.familyLengthWithSize);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>          // copy the rest of row<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          currentBuffer.get(current.keyBuffer, Bytes.SIZEOF_SHORT,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>              current.rowLengthWithSize - Bytes.SIZEOF_SHORT);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>          // copy the qualifier<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              + current.familyLengthWithSize, current.keyLength<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.450"></a>
+<span class="sourceLineNo">451</span>              - current.prevTimestampAndType.length);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        } else if (current.lastCommonPrefix &lt; current.rowLengthWithSize) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          // We have to copy part of row and qualifier, but the column family<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          // is in the right place.<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // before column family (rest of row)<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              current.rowLengthWithSize - current.lastCommonPrefix);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>          // after column family (qualifier)<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          currentBuffer.get(current.keyBuffer, current.rowLengthWithSize<a name="line.461"></a>
+<span class="sourceLineNo">462</span>              + current.familyLengthWithSize, current.keyLength<a name="line.462"></a>
+<span class="sourceLineNo">463</span>              - current.rowLengthWithSize - current.familyLengthWithSize<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              - current.prevTimestampAndType.length);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        } else {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          // copy just the ending<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          currentBuffer.get(current.keyBuffer, current.lastCommonPrefix,<a name="line.467"></a>
+<span class="sourceLineNo">468</span>              current.keyLength - current.prevTimestampAndType.length<a name="line.468"></a>
+<span class="sourceLineNo">469</span>                  - current.lastCommonPrefix);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>        // timestamp<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        int pos = current.keyLength - current.prevTimestampAndType.length;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        int commonTimestampPrefix = (flag &amp; MASK_TIMESTAMP_LENGTH) &gt;&gt;&gt;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          SHIFT_TIMESTAMP_LENGTH;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          System.arraycopy(current.prevTimestampAndType, 0, current.keyBuffer,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>              pos, commonTimestampPrefix);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        pos += commonTimestampPrefix;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        currentBuffer.get(current.keyBuffer, pos,<a name="line.481"></a>
+<span class="sourceLineNo">482</span>            Bytes.SIZEOF_LONG - commonTimestampPrefix);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        pos += Bytes.SIZEOF_LONG - commonTimestampPrefix;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>        // type<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        if ((flag &amp; FLAG_SAME_TYPE) == 0) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          currentBuffer.get(current.keyBuffer, pos, Bytes.SIZEOF_BYTE);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        } else if ((flag &amp; FLAG_SAME_KEY_LENGTH) == 0) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          current.keyBuffer[pos] =<a name="line.489"></a>
+<span class="sourceLineNo">490</span>              current.prevTimestampAndType[Bytes.SIZEOF_LONG];<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>        // handle value<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        if ((flag &amp; FLAG_SAME_VALUE) == 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          current.valueOffset = currentBuffer.position();<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          currentBuffer.skip(current.valueLength);<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>        if (includesTags()) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>          decodeTags();<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        if (includesMvcc()) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          current.memstoreTS = ByteBuff.readVLong(currentBuffer);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        } else {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>          current.memstoreTS = 0;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        current.nextKvOffset = currentBuffer.position();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>      @Override<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      protected void decodeFirst() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        currentBuffer.skip(Bytes.SIZEOF_INT);<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        decode(true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>      @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      protected void decodeNext() {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        decode(false);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>      @Override<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      protected FastDiffSeekerState createSeekerState() {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        return new FastDiffSeekerState(this.tmpPair, this.includesTags(),<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            this.tagsCompressed());<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    };<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span>}<a name="line.528"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html
new file mode 100644
index 0000000..c1e7ad8
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.RowIndexEncodingState.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with this<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * work for additional information regarding copyright ownership. The ASF<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * licenses this file to you under the Apache License, Version 2.0 (the<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * "License"); you may not use this file except in compliance with the License.<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * You may obtain a copy of the License at<a name="line.7"></a>
+<span class="sourceLineNo">008</span> *<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * License for the specific language governing permissions and limitations<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * under the License.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> */<a name="line.16"></a>
+<span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.io.DataInputStream;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.DataOutputStream;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.nio.ByteBuffer;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.ByteBufferedKeyOnlyKeyValue;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Cell;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.io.ByteArrayOutputStream;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.io.hfile.BlockType;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.io.WritableUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Store cells following every row's start offset, so we can binary search to a row's cells.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * Format:<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * flat cells<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * integer: number of rows<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * integer: row0's offset<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * integer: row1's offset<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * ....<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * integer: dataSize<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span>*/<a name="line.52"></a>
+<span class="sourceLineNo">053</span>@InterfaceAudience.Private<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class RowIndexCodecV1 implements DataBlockEncoder {<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static class RowIndexEncodingState extends EncodingState {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    RowIndexEncoderV1 encoder = null;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public void startBlockEncoding(HFileBlockEncodingContext blkEncodingCtx,<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      DataOutputStream out) throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    if (blkEncodingCtx.getClass() != HFileBlockDefaultEncodingContext.class) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      throw new IOException(this.getClass().getName() + " only accepts "<a name="line.64"></a>
+<span class="sourceLineNo">065</span>          + HFileBlockDefaultEncodingContext.class.getName() + " as the "<a name="line.65"></a>
+<span class="sourceLineNo">066</span>          + "encoding context.");<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>    HFileBlockDefaultEncodingContext encodingCtx = (HFileBlockDefaultEncodingContext) blkEncodingCtx;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    encodingCtx.prepareEncoding(out);<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    RowIndexEncoderV1 encoder = new RowIndexEncoderV1(out, encodingCtx);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    RowIndexEncodingState state = new RowIndexEncodingState();<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    state.encoder = encoder;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    blkEncodingCtx.setEncodingState(state);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public int encode(Cell cell, HFileBlockEncodingContext encodingCtx,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      DataOutputStream out) throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    RowIndexEncodingState state = (RowIndexEncodingState) encodingCtx<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        .getEncodingState();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    RowIndexEncoderV1 encoder = state.encoder;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    return encoder.write(cell);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  @Override<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public void endBlockEncoding(HFileBlockEncodingContext encodingCtx,<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      DataOutputStream out, byte[] uncompressedBytesWithHeader)<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      throws IOException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    RowIndexEncodingState state = (RowIndexEncodingState) encodingCtx<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        .getEncodingState();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    RowIndexEncoderV1 encoder = state.encoder;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    encoder.flush();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    if (encodingCtx.getDataBlockEncoding() != DataBlockEncoding.NONE) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      encodingCtx.postEncoding(BlockType.ENCODED_DATA);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    } else {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      encodingCtx.postEncoding(BlockType.DATA);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public ByteBuffer decodeKeyValues(DataInputStream source,<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      HFileBlockDecodingContext decodingCtx) throws IOException {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    ByteBuffer sourceAsBuffer = ByteBufferUtils<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        .drainInputStreamToBuffer(source);// waste<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    sourceAsBuffer.mark();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    if (!decodingCtx.getHFileContext().isIncludesTags()) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      sourceAsBuffer.position(sourceAsBuffer.limit() - Bytes.SIZEOF_INT);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      int onDiskSize = sourceAsBuffer.getInt();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      sourceAsBuffer.reset();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      ByteBuffer dup = sourceAsBuffer.duplicate();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      dup.position(sourceAsBuffer.position());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      dup.limit(sourceAsBuffer.position() + onDiskSize);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return dup.slice();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    } else {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      RowIndexSeekerV1 seeker = new RowIndexSeekerV1(CellComparator.COMPARATOR,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          decodingCtx);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      seeker.setCurrentBuffer(new SingleByteBuff(sourceAsBuffer));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      List&lt;Cell&gt; kvs = new ArrayList&lt;Cell&gt;();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      kvs.add(seeker.getCell());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      while (seeker.next()) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        kvs.add(seeker.getCell());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      boolean includesMvcc = decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      ByteArrayOutputStream baos = new ByteArrayOutputStream();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      DataOutputStream out = new DataOutputStream(baos);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      for (Cell cell : kvs) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        KeyValue currentCell = KeyValueUtil.copyToNewKeyValue(cell);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        out.write(currentCell.getBuffer(), currentCell.getOffset(),<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            currentCell.getLength());<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        if (includesMvcc) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          WritableUtils.writeVLong(out, cell.getSequenceId());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      out.flush();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      return ByteBuffer.wrap(baos.getBuffer(), 0, baos.size());<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public HFileBlockEncodingContext newDataBlockEncodingContext(<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      DataBlockEncoding encoding, byte[] header, HFileContext meta) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    return new HFileBlockDefaultEncodingContext(encoding, header, meta);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public HFileBlockDecodingContext newDataBlockDecodingContext(HFileContext meta) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return new HFileBlockDefaultDecodingContext(meta);<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>  @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public Cell getFirstKeyCellInBlock(ByteBuff block) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    block.mark();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    int keyLength = block.getInt();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    block.getInt();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ByteBuffer key = block.asSubByteBuffer(keyLength).duplicate();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    block.reset();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return createFirstKeyCell(key, keyLength);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    return new RowIndexSeekerV1(comparator, decodingCtx);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>  protected Cell createFirstKeyCell(ByteBuffer key, int keyLength) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    if (key.hasArray()) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      return new KeyValue.KeyOnlyKeyValue(key.array(), key.arrayOffset()<a name="line.170"></a>
+<span class="sourceLineNo">171</span>          + key.position(), keyLength);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      return new ByteBufferedKeyOnlyKeyValue(key, key.position(), keyLength);<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><a name="line.176"></a>
+<span class="sourceLineNo">177</span>}<a name="line.177"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html
new file mode 100644
index 0000000..c1e7ad8
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with this<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * work for additional information regarding copyright ownership. The ASF<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * licenses this file to you under the Apache License, Version 2.0 (the<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * "License"); you may not use this file except in compliance with the License.<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * You may obtain a copy of the License at<a name="line.7"></a>
+<span class="sourceLineNo">008</span> *<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * License for the specific language governing permissions and limitations<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * under the License.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> */<a name="line.16"></a>
+<span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.io.DataInputStream;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.DataOutputStream;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.nio.ByteBuffer;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.ByteBufferedKeyOnlyKeyValue;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Cell;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.io.ByteArrayOutputStream;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.io.hfile.BlockType;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.io.WritableUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Store cells following every row's start offset, so we can binary search to a row's cells.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * Format:<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * flat cells<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * integer: number of rows<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * integer: row0's offset<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * integer: row1's offset<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * ....<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * integer: dataSize<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span>*/<a name="line.52"></a>
+<span class="sourceLineNo">053</span>@InterfaceAudience.Private<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class RowIndexCodecV1 implements DataBlockEncoder {<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static class RowIndexEncodingState extends EncodingState {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    RowIndexEncoderV1 encoder = null;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public void startBlockEncoding(HFileBlockEncodingContext blkEncodingCtx,<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      DataOutputStream out) throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    if (blkEncodingCtx.getClass() != HFileBlockDefaultEncodingContext.class) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      throw new IOException(this.getClass().getName() + " only accepts "<a name="line.64"></a>
+<span class="sourceLineNo">065</span>          + HFileBlockDefaultEncodingContext.class.getName() + " as the "<a name="line.65"></a>
+<span class="sourceLineNo">066</span>          + "encoding context.");<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>    HFileBlockDefaultEncodingContext encodingCtx = (HFileBlockDefaultEncodingContext) blkEncodingCtx;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    encodingCtx.prepareEncoding(out);<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    RowIndexEncoderV1 encoder = new RowIndexEncoderV1(out, encodingCtx);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    RowIndexEncodingState state = new RowIndexEncodingState();<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    state.encoder = encoder;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    blkEncodingCtx.setEncodingState(state);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public int encode(Cell cell, HFileBlockEncodingContext encodingCtx,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      DataOutputStream out) throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    RowIndexEncodingState state = (RowIndexEncodingState) encodingCtx<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        .getEncodingState();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    RowIndexEncoderV1 encoder = state.encoder;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    return encoder.write(cell);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  @Override<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public void endBlockEncoding(HFileBlockEncodingContext encodingCtx,<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      DataOutputStream out, byte[] uncompressedBytesWithHeader)<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      throws IOException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    RowIndexEncodingState state = (RowIndexEncodingState) encodingCtx<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        .getEncodingState();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    RowIndexEncoderV1 encoder = state.encoder;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    encoder.flush();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    if (encodingCtx.getDataBlockEncoding() != DataBlockEncoding.NONE) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      encodingCtx.postEncoding(BlockType.ENCODED_DATA);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    } else {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      encodingCtx.postEncoding(BlockType.DATA);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public ByteBuffer decodeKeyValues(DataInputStream source,<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      HFileBlockDecodingContext decodingCtx) throws IOException {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    ByteBuffer sourceAsBuffer = ByteBufferUtils<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        .drainInputStreamToBuffer(source);// waste<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    sourceAsBuffer.mark();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    if (!decodingCtx.getHFileContext().isIncludesTags()) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      sourceAsBuffer.position(sourceAsBuffer.limit() - Bytes.SIZEOF_INT);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      int onDiskSize = sourceAsBuffer.getInt();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      sourceAsBuffer.reset();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      ByteBuffer dup = sourceAsBuffer.duplicate();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      dup.position(sourceAsBuffer.position());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      dup.limit(sourceAsBuffer.position() + onDiskSize);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return dup.slice();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    } else {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      RowIndexSeekerV1 seeker = new RowIndexSeekerV1(CellComparator.COMPARATOR,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          decodingCtx);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      seeker.setCurrentBuffer(new SingleByteBuff(sourceAsBuffer));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      List&lt;Cell&gt; kvs = new ArrayList&lt;Cell&gt;();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      kvs.add(seeker.getCell());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      while (seeker.next()) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        kvs.add(seeker.getCell());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      boolean includesMvcc = decodingCtx.getHFileContext().isIncludesMvcc();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      ByteArrayOutputStream baos = new ByteArrayOutputStream();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      DataOutputStream out = new DataOutputStream(baos);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      for (Cell cell : kvs) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        KeyValue currentCell = KeyValueUtil.copyToNewKeyValue(cell);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        out.write(currentCell.getBuffer(), currentCell.getOffset(),<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            currentCell.getLength());<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        if (includesMvcc) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          WritableUtils.writeVLong(out, cell.getSequenceId());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      out.flush();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      return ByteBuffer.wrap(baos.getBuffer(), 0, baos.size());<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public HFileBlockEncodingContext newDataBlockEncodingContext(<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      DataBlockEncoding encoding, byte[] header, HFileContext meta) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    return new HFileBlockDefaultEncodingContext(encoding, header, meta);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public HFileBlockDecodingContext newDataBlockDecodingContext(HFileContext meta) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return new HFileBlockDefaultDecodingContext(meta);<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>  @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public Cell getFirstKeyCellInBlock(ByteBuff block) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    block.mark();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    int keyLength = block.getInt();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    block.getInt();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ByteBuffer key = block.asSubByteBuffer(keyLength).duplicate();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    block.reset();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return createFirstKeyCell(key, keyLength);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public EncodedSeeker createSeeker(CellComparator comparator,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      HFileBlockDecodingContext decodingCtx) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    return new RowIndexSeekerV1(comparator, decodingCtx);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>  protected Cell createFirstKeyCell(ByteBuffer key, int keyLength) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    if (key.hasArray()) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      return new KeyValue.KeyOnlyKeyValue(key.array(), key.arrayOffset()<a name="line.170"></a>
+<span class="sourceLineNo">171</span>          + key.position(), keyLength);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      return new ByteBufferedKeyOnlyKeyValue(key, key.position(), keyLength);<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><a name="line.176"></a>
+<span class="sourceLineNo">177</span>}<a name="line.177"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html
new file mode 100644
index 0000000..96b9dae
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexEncoderV1.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more contributor license<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * agreements. See the NOTICE file distributed with this work for additional information regarding<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * "License"); you may not use this file except in compliance with the License. You may obtain a<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * for the specific language governing permissions and limitations under the License.<a name="line.9"></a>
+<span class="sourceLineNo">010</span> */<a name="line.10"></a>
+<span class="sourceLineNo">011</span>package org.apache.hadoop.hbase.io.encoding;<a name="line.11"></a>
+<span class="sourceLineNo">012</span><a name="line.12"></a>
+<span class="sourceLineNo">013</span>import java.io.DataOutputStream;<a name="line.13"></a>
+<span class="sourceLineNo">014</span>import java.io.IOException;<a name="line.14"></a>
+<span class="sourceLineNo">015</span><a name="line.15"></a>
+<span class="sourceLineNo">016</span>import org.apache.commons.logging.Log;<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.commons.logging.LogFactory;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import org.apache.hadoop.hbase.Cell;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.io.ByteArrayOutputStream;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.io.WritableUtils;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>@InterfaceAudience.Private<a name="line.27"></a>
+<span class="sourceLineNo">028</span>public class RowIndexEncoderV1 {<a name="line.28"></a>
+<span class="sourceLineNo">029</span>  private static final Log LOG = LogFactory.getLog(RowIndexEncoderV1.class);<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>  /** The Cell previously appended. */<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  private Cell lastCell = null;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>  private DataOutputStream out;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>  private HFileBlockDefaultEncodingContext encodingCtx;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  private int startOffset = -1;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>  private ByteArrayOutputStream rowsOffsetBAOS = new ByteArrayOutputStream(<a name="line.37"></a>
+<span class="sourceLineNo">038</span>      64 * 4);<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  public RowIndexEncoderV1(DataOutputStream out, HFileBlockDefaultEncodingContext encodingCtx) {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    this.out = out;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    this.encodingCtx = encodingCtx;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  }<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  public int write(Cell cell) throws IOException {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    // checkRow uses comparator to check we are writing in order.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    if (!checkRow(cell)) {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>      if (startOffset &lt; 0) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>        startOffset = out.size();<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      }<a name="line.50"></a>
+<span class="sourceLineNo">051</span>      rowsOffsetBAOS.writeInt(out.size() - startOffset);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    }<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    int klength = KeyValueUtil.keyLength(cell);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    int vlength = cell.getValueLength();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    out.writeInt(klength);<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    out.writeInt(vlength);<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    CellUtil.writeFlatKey(cell, out);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    // Write the value part<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    CellUtil.writeValue(out, cell, vlength);<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    int encodedKvSize = klength + vlength<a name="line.60"></a>
+<span class="sourceLineNo">061</span>        + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    // Write the additional tag into the stream<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    if (encodingCtx.getHFileContext().isIncludesTags()) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      int tagsLength = cell.getTagsLength();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      out.writeShort(tagsLength);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      if (tagsLength &gt; 0) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        CellUtil.writeTags(out, cell, tagsLength);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      encodedKvSize += tagsLength + KeyValue.TAGS_LENGTH_SIZE;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    if (encodingCtx.getHFileContext().isIncludesMvcc()) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      WritableUtils.writeVLong(out, cell.getSequenceId());<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      encodedKvSize += WritableUtils.getVIntSize(cell.getSequenceId());<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    lastCell = cell;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return encodedKvSize;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected boolean checkRow(final Cell cell) throws IOException {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    boolean isDuplicateRow = false;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    if (cell == null) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      throw new IOException("Key cannot be null or empty");<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    if (lastCell != null) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      int keyComp = CellComparator.COMPARATOR.compareRows(lastCell, cell);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      if (keyComp &gt; 0) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        throw new IOException("Added a key not lexically larger than"<a name="line.87"></a>
+<span class="sourceLineNo">088</span>            + " previous. Current cell = " + cell + ", lastCell = " + lastCell);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      } else if (keyComp == 0) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        isDuplicateRow = true;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      }<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    return isDuplicateRow;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public void flush() throws IOException {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    int onDiskDataSize = 0;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    if (startOffset &gt;= 0) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      onDiskDataSize = out.size() - startOffset;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    out.writeInt(rowsOffsetBAOS.size() / 4);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    if (rowsOffsetBAOS.size() &gt; 0) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      out.write(rowsOffsetBAOS.getBuffer(), 0, rowsOffsetBAOS.size());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    out.writeInt(onDiskDataSize);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    if (LOG.isTraceEnabled()) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      LOG.trace("RowNumber: " + rowsOffsetBAOS.size() / 4<a name="line.107"></a>
+<span class="sourceLineNo">108</span>          + ", onDiskDataSize: " + onDiskDataSize + ", totalOnDiskSize: "<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          + (out.size() - startOffset));<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>}<a name="line.113"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[52/52] hbase-site git commit: Empty commit

Posted by mi...@apache.org.
Empty commit


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

Branch: refs/heads/asf-site
Commit: 66fcd0fa36e1cbe77a0758a9b1813c315967b6ca
Parents: 45a663d
Author: Misty Stanley-Jones <mi...@apache.org>
Authored: Mon Aug 29 08:32:32 2016 -0700
Committer: Misty Stanley-Jones <mi...@apache.org>
Committed: Mon Aug 29 08:32:32 2016 -0700

----------------------------------------------------------------------

----------------------------------------------------------------------



[36/52] [partial] hbase-site git commit: Published site at 950d547dae684155020edb879a343bee1bf18e97.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
index 6509619..d5a045c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html
@@ -109,7 +109,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.68">TakeSnapshotHandler</a>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.69">TakeSnapshotHandler</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/executor/EventHandler.html" title="class in org.apache.hadoop.hbase.executor">EventHandler</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a>, <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html" title="interface in org.apache.hadoop.hbase.errorhandling">ForeignExceptionSnare</a></pre>
 <div class="block">A handler for taking snapshots from the master.
@@ -180,30 +180,34 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotDir">snapshotDir</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotManager">snapshotManager</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotManifest">snapshotManifest</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotTable">snapshotTable</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#status">status</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/TableLockManager.TableLock.html" title="interface in org.apache.hadoop.hbase.master">TableLockManager.TableLock</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLock">tableLock</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/TableLockManager.html" title="class in org.apache.hadoop.hbase.master">TableLockManager</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#tableLockManager">tableLockManager</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.master.snapshot">MasterSnapshotVerifier</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#verifier">verifier</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#workingDir">workingDir</a></strong></code>&nbsp;</td>
 </tr>
@@ -229,8 +233,9 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices)">TakeSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
-                                      <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</code>&nbsp;</td>
+<td class="colOne"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">TakeSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                                      <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                                      <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -374,7 +379,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.70">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.71">LOG</a></pre>
 </li>
 </ul>
 <a name="finished">
@@ -383,7 +388,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>finished</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.72">finished</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.73">finished</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -392,7 +397,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.75">master</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.76">master</a></pre>
 </li>
 </ul>
 <a name="metricsSnapshot">
@@ -401,7 +406,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsSnapshot</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MetricsSnapshot.html" title="class in org.apache.hadoop.hbase.master">MetricsSnapshot</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.76">metricsSnapshot</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MetricsSnapshot.html" title="class in org.apache.hadoop.hbase.master">MetricsSnapshot</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.77">metricsSnapshot</a></pre>
 </li>
 </ul>
 <a name="snapshot">
@@ -410,7 +415,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre>protected final&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.77">snapshot</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.78">snapshot</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -419,7 +424,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>protected final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.78">conf</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.79">conf</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -428,7 +433,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.79">fs</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.80">fs</a></pre>
 </li>
 </ul>
 <a name="rootDir">
@@ -437,7 +442,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>rootDir</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.80">rootDir</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.81">rootDir</a></pre>
 </li>
 </ul>
 <a name="snapshotDir">
@@ -446,7 +451,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.81">snapshotDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.82">snapshotDir</a></pre>
 </li>
 </ul>
 <a name="workingDir">
@@ -455,7 +460,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>workingDir</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.82">workingDir</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.83">workingDir</a></pre>
 </li>
 </ul>
 <a name="verifier">
@@ -464,7 +469,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>verifier</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.master.snapshot">MasterSnapshotVerifier</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.83">verifier</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.master.snapshot">MasterSnapshotVerifier</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.84">verifier</a></pre>
 </li>
 </ul>
 <a name="monitor">
@@ -473,7 +478,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>monitor</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.84">monitor</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.85">monitor</a></pre>
 </li>
 </ul>
 <a name="tableLockManager">
@@ -482,7 +487,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>tableLockManager</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/TableLockManager.html" title="class in org.apache.hadoop.hbase.master">TableLockManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.85">tableLockManager</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/TableLockManager.html" title="class in org.apache.hadoop.hbase.master">TableLockManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.86">tableLockManager</a></pre>
 </li>
 </ul>
 <a name="tableLock">
@@ -491,7 +496,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>tableLock</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/TableLockManager.TableLock.html" title="interface in org.apache.hadoop.hbase.master">TableLockManager.TableLock</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.86">tableLock</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/TableLockManager.TableLock.html" title="interface in org.apache.hadoop.hbase.master">TableLockManager.TableLock</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.87">tableLock</a></pre>
 </li>
 </ul>
 <a name="status">
@@ -500,7 +505,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>status</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.87">status</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.88">status</a></pre>
 </li>
 </ul>
 <a name="snapshotTable">
@@ -509,7 +514,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotTable</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.88">snapshotTable</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.89">snapshotTable</a></pre>
 </li>
 </ul>
 <a name="snapshotManifest">
@@ -518,7 +523,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotManifest</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.89">snapshotManifest</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.90">snapshotManifest</a></pre>
+</li>
+</ul>
+<a name="snapshotManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>snapshotManager</h4>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.91">snapshotManager</a></pre>
 </li>
 </ul>
 <a name="htd">
@@ -527,7 +541,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockListLast">
 <li class="blockList">
 <h4>htd</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.91">htd</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.93">htd</a></pre>
 </li>
 </ul>
 </li>
@@ -538,14 +552,15 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription, org.apache.hadoop.hbase.master.MasterServices)">
+<a name="TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription, org.apache.hadoop.hbase.master.MasterServices, org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TakeSnapshotHandler</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.97">TakeSnapshotHandler</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
-                   <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.99">TakeSnapshotHandler</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                   <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                   <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>snapshot</code> - descriptor of the snapshot to take</dd><dd><code>masterServices</code> - master services provider</dd></dl>
 </li>
 </ul>
@@ -563,7 +578,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTableDescriptor</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.125">loadTableDescriptor</a>()
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.129">loadTableDescriptor</a>()
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a>,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -577,7 +592,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.135">prepare</a>()
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html" title="class in org.apache.hadoop.hbase.master.snapshot">TakeSnapshotHandler</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.139">prepare</a>()
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/executor/EventHandler.html#prepare()">EventHandler</a></code></strong></div>
 <div class="block">Event handlers should do all the necessary checks in this method (rather than
@@ -599,7 +614,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>process</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.159">process</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.163">process</a>()</pre>
 <div class="block">Execute the core common portions of taking a snapshot. The <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotRegions(java.util.List)"><code>snapshotRegions(List)</code></a>
  call should get implemented for each snapshot flavor.</div>
 <dl>
@@ -614,7 +629,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseTableLock</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.235">releaseTableLock</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.241">releaseTableLock</a>()</pre>
 </li>
 </ul>
 <a name="completeSnapshot(org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.FileSystem)">
@@ -623,7 +638,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>completeSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.254">completeSnapshot</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.260">completeSnapshot</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir,
                     org.apache.hadoop.fs.Path&nbsp;workingDir,
                     org.apache.hadoop.fs.FileSystem&nbsp;fs)
                       throws <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotCreationException.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotCreationException</a>,
@@ -641,7 +656,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotRegions</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.268">snapshotRegions</a>(<a href="http://docs.oracle.com/javase/7/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/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;regions)
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.274">snapshotRegions</a>(<a href="http://docs.oracle.com/javase/7/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/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;regions)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                         org.apache.zookeeper.KeeperException</pre>
 <div class="block">Snapshot the specified regions</div>
@@ -656,7 +671,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotDisabledRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.274">snapshotDisabledRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.280">snapshotDisabledRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Take a snapshot of the specified disabled region</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -669,7 +684,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>cancel</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.283">cancel</a>(<a href="http://docs.oracle.com/javase/7/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/snapshot/TakeSnapshotHandler.html#line.289">cancel</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#cancel(java.lang.String)">SnapshotSentinel</a></code></strong></div>
 <div class="block">Actively cancel a running snapshot.</div>
 <dl>
@@ -684,7 +699,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.294">isFinished</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.300">isFinished</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#isFinished()">SnapshotSentinel</a></code></strong></div>
 <div class="block">Check to see if the snapshot is finished, where finished may be success or failure.</div>
 <dl>
@@ -700,7 +715,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletionTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.299">getCompletionTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.305">getCompletionTimestamp</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#getCompletionTimestamp()">getCompletionTimestamp</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a></code></dd>
@@ -713,7 +728,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshot</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.304">getSnapshot</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.310">getSnapshot</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#getSnapshot()">getSnapshot</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master">SnapshotSentinel</a></code></dd>
@@ -726,7 +741,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionIfFailed</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.309">getExceptionIfFailed</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.315">getExceptionIfFailed</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#getExceptionIfFailed()">SnapshotSentinel</a></code></strong></div>
 <div class="block">Get the exception that caused the snapshot to fail, if the snapshot has failed.</div>
 <dl>
@@ -742,7 +757,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>rethrowExceptionIfFailed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.314">rethrowExceptionIfFailed</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.320">rethrowExceptionIfFailed</a>()
                               throws <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#rethrowExceptionIfFailed()">SnapshotSentinel</a></code></strong></div>
 <div class="block">Rethrow the exception returned by <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSentinel.html#getExceptionIfFailed()"><code>SnapshotSentinel.getExceptionIfFailed()</code></a>.
@@ -760,7 +775,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>rethrowException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.319">rethrowException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.325">rethrowException</a>()
                       throws <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html#rethrowException()">ForeignExceptionSnare</a></code></strong></div>
 <div class="block">Rethrow an exception currently held by the <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html" title="interface in org.apache.hadoop.hbase.errorhandling"><code>ForeignExceptionSnare</code></a>. If there is
@@ -778,7 +793,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockList">
 <li class="blockList">
 <h4>hasException</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.324">hasException</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.330">hasException</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html#hasException()">ForeignExceptionSnare</a></code></strong></div>
 <div class="block">Non-exceptional form of <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html#rethrowException()"><code>ForeignExceptionSnare.rethrowException()</code></a>. Checks to see if any
  process to which the exception checkers is bound has created an error that
@@ -795,7 +810,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotSen
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getException</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.329">getException</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#line.335">getException</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html#getException()">ForeignExceptionSnare</a></code></strong></div>
 <div class="block">Get the value of the captured exception.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/master/snapshot/class-use/SnapshotManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/snapshot/class-use/SnapshotManager.html b/devapidocs/org/apache/hadoop/hbase/master/snapshot/class-use/SnapshotManager.html
index d0ec8d7..a5ac201 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/snapshot/class-use/SnapshotManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/snapshot/class-use/SnapshotManager.html
@@ -126,6 +126,39 @@
 <!--   -->
 </a>
 <h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> in <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></code></td>
+<td class="colLast"><span class="strong">TakeSnapshotHandler.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#snapshotManager">snapshotManager</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
+<td class="colLast"><span class="strong">SnapshotFileCache.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getSnapshotsInProgress(org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">getSnapshotsInProgress</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;</code></td>
+<td class="colLast"><span class="strong">SnapshotFileCache.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getUnreferencedFiles(java.lang.Iterable,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">getUnreferencedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
+                                        <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>
+<div class="block">Check to see if any of the passed file names is contained in any of the snapshots.</div>
+</td>
+</tr>
+</tbody>
+</table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
 <caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/package-summary.html">org.apache.hadoop.hbase.master.snapshot</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
@@ -133,10 +166,20 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.html#DisabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">DisabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                                                        <a href="../../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                                                        <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.html#EnabledTableSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">EnabledTableSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
                                                       <a href="../../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master,
                                                       <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;manager)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.html#TakeSnapshotHandler(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription,%20org.apache.hadoop.hbase.master.MasterServices,%20org.apache.hadoop.hbase.master.snapshot.SnapshotManager)">TakeSnapshotHandler</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription&nbsp;snapshot,
+                                      <a href="../../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                                      <a href="../../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html b/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
index c3c6068..721799a 100644
--- a/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
+++ b/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
@@ -413,6 +413,18 @@
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#currentBuffer">currentBuffer</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#currentBuffer">currentBuffer</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.SeekerState.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html#currentBuffer">currentBuffer</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#rowOffsets">rowOffsets</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -428,30 +440,34 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="strong">RowIndexCodecV1.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexCodecV1.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>
 <div class="block">Return first key in block as a cell.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">FastDiffDeltaEncoder.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">PrefixKeyDeltaEncoder.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="strong">DiffKeyDeltaEncoder.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.html#getFirstKeyCellInBlock(org.apache.hadoop.hbase.nio.ByteBuff)">getFirstKeyCellInBlock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;block)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HFileBlockDefaultDecodingContext.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html#prepareDecoding(int,%20int,%20org.apache.hadoop.hbase.nio.ByteBuff,%20org.apache.hadoop.hbase.nio.ByteBuff)">prepareDecoding</a></strong>(int&nbsp;onDiskSizeWithoutHeader,
                               int&nbsp;uncompressedSizeWithoutHeader,
                               <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;blockBufferWithoutHeader,
                               <a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;onDiskBlock)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HFileBlockDecodingContext.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html#prepareDecoding(int,%20int,%20org.apache.hadoop.hbase.nio.ByteBuff,%20org.apache.hadoop.hbase.nio.ByteBuff)">prepareDecoding</a></strong>(int&nbsp;onDiskSizeWithoutHeader,
                               int&nbsp;uncompressedSizeWithoutHeader,
@@ -461,16 +477,20 @@
  process.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">BufferedDataBlockEncoder.BufferedEncodedSeeker.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.BufferedEncodedSeeker.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">setCurrentBuffer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">DataBlockEncoder.EncodedSeeker.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.EncodedSeeker.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">setCurrentBuffer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</code>
 <div class="block">Set on which buffer there will be done seeking.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">RowIndexSeekerV1.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html#setCurrentBuffer(org.apache.hadoop.hbase.nio.ByteBuff)">setCurrentBuffer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buffer)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 8a8ce08..3d65041 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -367,8 +367,8 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/VersionAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">VersionAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 <h2 title="Enum Hierarchy">Enum Hierarchy</h2>
 <ul>
@@ -376,15 +376,15 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HealthChecker.HealthCheckerExitStatus</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="strong">HConstants.OperationStatusCode</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="strong">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</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="strong">CompatibilitySingletonFactory.SingletonStorage</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="strong">KeepDeletedCells</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="strong">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="strong">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="strong">ProcedureState</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="strong">HConstants.OperationStatusCode</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="strong">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="strong">KeyValue.Type</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="strong">Coprocessor.State</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="strong">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/devapidocs/org/apache/hadoop/hbase/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-use.html b/devapidocs/org/apache/hadoop/hbase/package-use.html
index 34c192a..f89137d 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-use.html
@@ -1531,28 +1531,35 @@ service.</div>
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ByteBufferedKeyOnlyKeyValue.html#org.apache.hadoop.hbase.io.encoding">ByteBufferedKeyOnlyKeyValue</a>
+<div class="block">This is a key only Cell implementation which is identical to <a href="../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue.KeyOnlyKeyValue</code></a>
+ with respect to key serialization but have its data in the form of Byte buffer
+ (onheap and offheap).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Cell.html#org.apache.hadoop.hbase.io.encoding">Cell</a>
 <div class="block">The unit of storage in HBase consisting of the following fields:
  <br></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/CellComparator.html#org.apache.hadoop.hbase.io.encoding">CellComparator</a>
 <div class="block">Compare two HBase cells.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/KeyValue.KeyOnlyKeyValue.html#org.apache.hadoop.hbase.io.encoding">KeyValue.KeyOnlyKeyValue</a>
 <div class="block">A simple form of KeyValue that creates a keyvalue with only the key part of the byte[]
  Mainly used in places where we need to compare two cells.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/SettableSequenceId.html#org.apache.hadoop.hbase.io.encoding">SettableSequenceId</a>
 <div class="block">Using this Interface one can mark a Cell as Sequence stampable.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Streamable.html#org.apache.hadoop.hbase.io.encoding">Streamable</a>
 <div class="block">This marks a Cell as streamable to a given OutputStream.</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/45a663dd/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 9fb2425..f595b55 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -172,11 +172,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottleType</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="strong">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">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="strong">ThrottlingException.Type</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="strong">QuotaScope</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="strong">QuotaType</span></a></li>
 </ul>
 </li>
 </ul>