You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/10/20 14:53:03 UTC

[04/51] [partial] hbase-site git commit: Published site at 7adf590106826b9e4432cfeee06acdc0ccff8c6e.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/425db230/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegion.HStoreForTesting.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegion.HStoreForTesting.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegion.HStoreForTesting.html
index ed3db7a..156dabb 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegion.HStoreForTesting.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegion.HStoreForTesting.html
@@ -5542,785 +5542,825 @@
 <span class="sourceLineNo">5534</span>  }<a name="line.5534"></a>
 <span class="sourceLineNo">5535</span><a name="line.5535"></a>
 <span class="sourceLineNo">5536</span>  @Test<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>  public void testWriteRequestsCounter() throws IOException {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>    byte[] fam = Bytes.toBytes("info");<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>    byte[][] families = { fam };<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>    this.region = initHRegion(tableName, method, CONF, families);<a name="line.5540"></a>
+<span class="sourceLineNo">5537</span>  public void testReverseScanWhenPutCellsAfterOpenReverseScan() throws Exception {<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>    byte[] cf1 = Bytes.toBytes("CF1");<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>    byte[][] families = { cf1 };<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>    byte[] col = Bytes.toBytes("C");<a name="line.5540"></a>
 <span class="sourceLineNo">5541</span><a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>    Assert.assertEquals(0L, region.getWriteRequestsCount());<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span><a name="line.5543"></a>
-<span class="sourceLineNo">5544</span>    Put put = new Put(row);<a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    put.addColumn(fam, fam, fam);<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span><a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>    Assert.assertEquals(0L, region.getWriteRequestsCount());<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>    region.put(put);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>    Assert.assertEquals(1L, region.getWriteRequestsCount());<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>    region.put(put);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>    Assert.assertEquals(2L, region.getWriteRequestsCount());<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    region.put(put);<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span>    Assert.assertEquals(3L, region.getWriteRequestsCount());<a name="line.5553"></a>
-<span class="sourceLineNo">5554</span><a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    region.delete(new Delete(row));<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>    Assert.assertEquals(4L, region.getWriteRequestsCount());<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>  }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>  @Test<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>  public void testOpenRegionWrittenToWAL() throws Exception {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>    final ServerName serverName = ServerName.valueOf(name.getMethodName(), 100, 42);<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    final RegionServerServices rss = spy(TEST_UTIL.createMockRegionServerService(serverName));<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    htd.addFamily(new HColumnDescriptor(fam1));<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>    htd.addFamily(new HColumnDescriptor(fam2));<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span><a name="line.5567"></a>
-<span class="sourceLineNo">5568</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(),<a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>      HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY);<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span><a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>    // open the region w/o rss and wal and flush some files<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>    region =<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>         HBaseTestingUtility.createRegionAndWAL(hri, TEST_UTIL.getDataTestDir(), TEST_UTIL<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>             .getConfiguration(), htd);<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>    assertNotNull(region);<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span><a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>    // create a file in fam1 for the region before opening in OpenRegionHandler<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    region.put(new Put(Bytes.toBytes("a")).addColumn(fam1, fam1, fam1));<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span>    region.flush(true);<a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    HBaseTestingUtility.closeRegionAndWAL(region);<a name="line.5580"></a>
+<span class="sourceLineNo">5542</span>    HBaseConfiguration conf = new HBaseConfiguration();<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>    this.region = initHRegion(tableName, method, conf, families);<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span><a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>    Put put = new Put(Bytes.toBytes("199996"));<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    put.addColumn(cf1, col, Bytes.toBytes("val"));<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span>    region.put(put);<a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    Put put2 = new Put(Bytes.toBytes("199995"));<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>    put2.addColumn(cf1, col, Bytes.toBytes("val"));<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>    region.put(put2);<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span><a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>    // Create a reverse scan<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>    Scan scan = new Scan(Bytes.toBytes("199996"));<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>    scan.setReversed(true);<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    RegionScannerImpl scanner = region.getScanner(scan);<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    // Put a lot of cells that have sequenceIDs grater than the readPt of the reverse scan<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    for (int i = 100000; i &lt; 200000; i++) {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      Put p = new Put(Bytes.toBytes("" + i));<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>      p.addColumn(cf1, col, Bytes.toBytes("" + i));<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span>      region.put(p);<a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    List&lt;Cell&gt; currRow = new ArrayList&lt;&gt;();<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>    boolean hasNext;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    do {<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span>      hasNext = scanner.next(currRow);<a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    } while (hasNext);<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span><a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>    assertEquals(2, currRow.size());<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    assertEquals("199996", Bytes.toString(currRow.get(0).getRowArray(),<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span>      currRow.get(0).getRowOffset(), currRow.get(0).getRowLength()));<a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    assertEquals("199995", Bytes.toString(currRow.get(1).getRowArray(),<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>      currRow.get(1).getRowOffset(), currRow.get(1).getRowLength()));<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>  }<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span><a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>  @Test<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>  public void testWriteRequestsCounter() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>    byte[] fam = Bytes.toBytes("info");<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>    byte[][] families = { fam };<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>    this.region = initHRegion(tableName, method, CONF, families);<a name="line.5580"></a>
 <span class="sourceLineNo">5581</span><a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>    ArgumentCaptor&lt;WALEdit&gt; editCaptor = ArgumentCaptor.forClass(WALEdit.class);<a name="line.5582"></a>
+<span class="sourceLineNo">5582</span>    Assert.assertEquals(0L, region.getWriteRequestsCount());<a name="line.5582"></a>
 <span class="sourceLineNo">5583</span><a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>    // capture append() calls<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    WAL wal = mockWAL();<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span>    when(rss.getWAL((HRegionInfo) any())).thenReturn(wal);<a name="line.5586"></a>
-<span class="sourceLineNo">5587</span><a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    region = HRegion.openHRegion(hri, htd, rss.getWAL(hri),<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>      TEST_UTIL.getConfiguration(), rss, null);<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span><a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>    verify(wal, times(1)).append((HRegionInfo)any(), (WALKeyImpl)any()<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>      , editCaptor.capture(), anyBoolean());<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span><a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>    WALEdit edit = editCaptor.getValue();<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>    assertNotNull(edit);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>    assertNotNull(edit.getCells());<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>    assertEquals(1, edit.getCells().size());<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>    RegionEventDescriptor desc = WALEdit.getRegionEventDescriptor(edit.getCells().get(0));<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>    assertNotNull(desc);<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span><a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>    LOG.info("RegionEventDescriptor from WAL: " + desc);<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span><a name="line.5602"></a>
-<span class="sourceLineNo">5603</span>    assertEquals(RegionEventDescriptor.EventType.REGION_OPEN, desc.getEventType());<a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    assertTrue(Bytes.equals(desc.getTableName().toByteArray(), htd.getTableName().toBytes()));<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    assertTrue(Bytes.equals(desc.getEncodedRegionName().toByteArray(),<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      hri.getEncodedNameAsBytes()));<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>    assertTrue(desc.getLogSequenceNumber() &gt; 0);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    assertEquals(serverName, ProtobufUtil.toServerName(desc.getServer()));<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span>    assertEquals(2, desc.getStoresCount());<a name="line.5609"></a>
+<span class="sourceLineNo">5584</span>    Put put = new Put(row);<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>    put.addColumn(fam, fam, fam);<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span><a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>    Assert.assertEquals(0L, region.getWriteRequestsCount());<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    region.put(put);<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span>    Assert.assertEquals(1L, region.getWriteRequestsCount());<a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    region.put(put);<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    Assert.assertEquals(2L, region.getWriteRequestsCount());<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    region.put(put);<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>    Assert.assertEquals(3L, region.getWriteRequestsCount());<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span><a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>    region.delete(new Delete(row));<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>    Assert.assertEquals(4L, region.getWriteRequestsCount());<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>  }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span><a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>  @Test<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>  public void testOpenRegionWrittenToWAL() throws Exception {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>    final ServerName serverName = ServerName.valueOf(name.getMethodName(), 100, 42);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>    final RegionServerServices rss = spy(TEST_UTIL.createMockRegionServerService(serverName));<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span><a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    htd.addFamily(new HColumnDescriptor(fam1));<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span>    htd.addFamily(new HColumnDescriptor(fam2));<a name="line.5606"></a>
+<span class="sourceLineNo">5607</span><a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(),<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY);<a name="line.5609"></a>
 <span class="sourceLineNo">5610</span><a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    StoreDescriptor store = desc.getStores(0);<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam1));<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam1));<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>    assertEquals(1, store.getStoreFileCount()); // 1store file<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>    assertFalse(store.getStoreFile(0).contains("/")); // ensure path is relative<a name="line.5615"></a>
+<span class="sourceLineNo">5611</span>    // open the region w/o rss and wal and flush some files<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span>    region =<a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>         HBaseTestingUtility.createRegionAndWAL(hri, TEST_UTIL.getDataTestDir(), TEST_UTIL<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>             .getConfiguration(), htd);<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>    assertNotNull(region);<a name="line.5615"></a>
 <span class="sourceLineNo">5616</span><a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>    store = desc.getStores(1);<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam2));<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam2));<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>    assertEquals(0, store.getStoreFileCount()); // no store files<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>  }<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span><a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>  // Helper for test testOpenRegionWrittenToWALForLogReplay<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>  static class HRegionWithSeqId extends HRegion {<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>    public HRegionWithSeqId(final Path tableDir, final WAL wal, final FileSystem fs,<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>        final Configuration confParam, final RegionInfo regionInfo,<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        final TableDescriptor htd, final RegionServerServices rsServices) {<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>    }<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>    @Override<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>    protected long getNextSequenceId(WAL wal) throws IOException {<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>      return 42;<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>    }<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>  }<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>  @Test<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>  public void testFlushedFileWithNoTags() throws Exception {<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>    htd.addFamily(new HColumnDescriptor(fam1));<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>    HRegionInfo info = new HRegionInfo(tableName, null, null, false);<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>    Path path = TEST_UTIL.getDataTestDir(getClass().getSimpleName());<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>    region = HBaseTestingUtility.createRegionAndWAL(info, path, TEST_UTIL.getConfiguration(), htd);<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>    Put put = new Put(Bytes.toBytes("a-b-0-0"));<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>    put.addColumn(fam1, qual1, Bytes.toBytes("c1-value"));<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>    region.put(put);<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>    region.flush(true);<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>    HStore store = region.getStore(fam1);<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>    Collection&lt;HStoreFile&gt; storefiles = store.getStorefiles();<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>    for (HStoreFile sf : storefiles) {<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>      assertFalse("Tags should not be present "<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>          ,sf.getReader().getHFileReader().getFileContext().isIncludesTags());<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>    }<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>  }<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span><a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>  /**<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>   * Utility method to setup a WAL mock.<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>   * Needs to do the bit where we close latch on the WALKeyImpl on append else test hangs.<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>   * @return a mock WAL<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>   * @throws IOException<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>   */<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span>  private WAL mockWAL() throws IOException {<a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    WAL wal = mock(WAL.class);<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>    Mockito.when(wal.append((HRegionInfo)Mockito.any(),<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>        (WALKeyImpl)Mockito.any(), (WALEdit)Mockito.any(), Mockito.anyBoolean())).<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>      thenAnswer(new Answer&lt;Long&gt;() {<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>        @Override<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>        public Long answer(InvocationOnMock invocation) throws Throwable {<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>          WALKeyImpl key = invocation.getArgument(1);<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          MultiVersionConcurrencyControl.WriteEntry we = key.getMvcc().begin();<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span>          key.setWriteEntry(we);<a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>          return 1L;<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        }<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span><a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>    });<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>    return wal;<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>  }<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span><a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>  @Test<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>  public void testCloseRegionWrittenToWAL() throws Exception {<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    Path rootDir = new Path(dir + name.getMethodName());<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>    FSUtils.setRootDir(TEST_UTIL.getConfiguration(), rootDir);<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span><a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>    final ServerName serverName = ServerName.valueOf("testCloseRegionWrittenToWAL", 100, 42);<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>    final RegionServerServices rss = spy(TEST_UTIL.createMockRegionServerService(serverName));<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span><a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>    htd.addFamily(new HColumnDescriptor(fam1));<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    htd.addFamily(new HColumnDescriptor(fam2));<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span><a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>    final HRegionInfo hri = new HRegionInfo(htd.getTableName(),<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY);<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span><a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>    ArgumentCaptor&lt;WALEdit&gt; editCaptor = ArgumentCaptor.forClass(WALEdit.class);<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span><a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>    // capture append() calls<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>    WAL wal = mockWAL();<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>    when(rss.getWAL((HRegionInfo) any())).thenReturn(wal);<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span><a name="line.5700"></a>
-<span class="sourceLineNo">5701</span><a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>    // create and then open a region first so that it can be closed later<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>    region = HRegion.createHRegion(hri, rootDir, TEST_UTIL.getConfiguration(), htd, rss.getWAL(hri));<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>    region = HRegion.openHRegion(hri, htd, rss.getWAL(hri),<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span>      TEST_UTIL.getConfiguration(), rss, null);<a name="line.5705"></a>
-<span class="sourceLineNo">5706</span><a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>    // close the region<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>    region.close(false);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span><a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>    // 2 times, one for region open, the other close region<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>    verify(wal, times(2)).append((HRegionInfo)any(), (WALKeyImpl)any(),<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>      editCaptor.capture(), anyBoolean());<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span><a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>    WALEdit edit = editCaptor.getAllValues().get(1);<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>    assertNotNull(edit);<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>    assertNotNull(edit.getCells());<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>    assertEquals(1, edit.getCells().size());<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>    RegionEventDescriptor desc = WALEdit.getRegionEventDescriptor(edit.getCells().get(0));<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>    assertNotNull(desc);<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span><a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>    LOG.info("RegionEventDescriptor from WAL: " + desc);<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span><a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>    assertEquals(RegionEventDescriptor.EventType.REGION_CLOSE, desc.getEventType());<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>    assertTrue(Bytes.equals(desc.getTableName().toByteArray(), htd.getTableName().toBytes()));<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    assertTrue(Bytes.equals(desc.getEncodedRegionName().toByteArray(),<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span>      hri.getEncodedNameAsBytes()));<a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    assertTrue(desc.getLogSequenceNumber() &gt; 0);<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>    assertEquals(serverName, ProtobufUtil.toServerName(desc.getServer()));<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>    assertEquals(2, desc.getStoresCount());<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span><a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>    StoreDescriptor store = desc.getStores(0);<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam1));<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam1));<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>    assertEquals(0, store.getStoreFileCount()); // no store files<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span><a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>    store = desc.getStores(1);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam2));<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam2));<a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    assertEquals(0, store.getStoreFileCount()); // no store files<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>  }<a name="line.5740"></a>
+<span class="sourceLineNo">5617</span>    // create a file in fam1 for the region before opening in OpenRegionHandler<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>    region.put(new Put(Bytes.toBytes("a")).addColumn(fam1, fam1, fam1));<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>    region.flush(true);<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>    HBaseTestingUtility.closeRegionAndWAL(region);<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span><a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>    ArgumentCaptor&lt;WALEdit&gt; editCaptor = ArgumentCaptor.forClass(WALEdit.class);<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span><a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>    // capture append() calls<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>    WAL wal = mockWAL();<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>    when(rss.getWAL((HRegionInfo) any())).thenReturn(wal);<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span><a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>    region = HRegion.openHRegion(hri, htd, rss.getWAL(hri),<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>      TEST_UTIL.getConfiguration(), rss, null);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span><a name="line.5630"></a>
+<span class="sourceLineNo">5631</span>    verify(wal, times(1)).append((HRegionInfo)any(), (WALKeyImpl)any()<a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>      , editCaptor.capture(), anyBoolean());<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span><a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>    WALEdit edit = editCaptor.getValue();<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>    assertNotNull(edit);<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>    assertNotNull(edit.getCells());<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>    assertEquals(1, edit.getCells().size());<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span>    RegionEventDescriptor desc = WALEdit.getRegionEventDescriptor(edit.getCells().get(0));<a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>    assertNotNull(desc);<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span><a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>    LOG.info("RegionEventDescriptor from WAL: " + desc);<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>    assertEquals(RegionEventDescriptor.EventType.REGION_OPEN, desc.getEventType());<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>    assertTrue(Bytes.equals(desc.getTableName().toByteArray(), htd.getTableName().toBytes()));<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>    assertTrue(Bytes.equals(desc.getEncodedRegionName().toByteArray(),<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>      hri.getEncodedNameAsBytes()));<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>    assertTrue(desc.getLogSequenceNumber() &gt; 0);<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>    assertEquals(serverName, ProtobufUtil.toServerName(desc.getServer()));<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>    assertEquals(2, desc.getStoresCount());<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span><a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>    StoreDescriptor store = desc.getStores(0);<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam1));<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam1));<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>    assertEquals(1, store.getStoreFileCount()); // 1store file<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>    assertFalse(store.getStoreFile(0).contains("/")); // ensure path is relative<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span><a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>    store = desc.getStores(1);<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam2));<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam2));<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>    assertEquals(0, store.getStoreFileCount()); // no store files<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>  }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span><a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>  // Helper for test testOpenRegionWrittenToWALForLogReplay<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>  static class HRegionWithSeqId extends HRegion {<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span>    public HRegionWithSeqId(final Path tableDir, final WAL wal, final FileSystem fs,<a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>        final Configuration confParam, final RegionInfo regionInfo,<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>        final TableDescriptor htd, final RegionServerServices rsServices) {<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    }<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>    @Override<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>    protected long getNextSequenceId(WAL wal) throws IOException {<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      return 42;<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>    }<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span>  }<a name="line.5674"></a>
+<span class="sourceLineNo">5675</span><a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>  @Test<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>  public void testFlushedFileWithNoTags() throws Exception {<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>    htd.addFamily(new HColumnDescriptor(fam1));<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>    HRegionInfo info = new HRegionInfo(tableName, null, null, false);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>    Path path = TEST_UTIL.getDataTestDir(getClass().getSimpleName());<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    region = HBaseTestingUtility.createRegionAndWAL(info, path, TEST_UTIL.getConfiguration(), htd);<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span>    Put put = new Put(Bytes.toBytes("a-b-0-0"));<a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    put.addColumn(fam1, qual1, Bytes.toBytes("c1-value"));<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>    region.put(put);<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>    region.flush(true);<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>    HStore store = region.getStore(fam1);<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>    Collection&lt;HStoreFile&gt; storefiles = store.getStorefiles();<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>    for (HStoreFile sf : storefiles) {<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>      assertFalse("Tags should not be present "<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>          ,sf.getReader().getHFileReader().getFileContext().isIncludesTags());<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    }<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>  }<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span><a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>  /**<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>   * Utility method to setup a WAL mock.<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>   * Needs to do the bit where we close latch on the WALKeyImpl on append else test hangs.<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>   * @return a mock WAL<a name="line.5699"></a>
+<span class="sourceLineNo">5700</span>   * @throws IOException<a name="line.5700"></a>
+<span class="sourceLineNo">5701</span>   */<a name="line.5701"></a>
+<span class="sourceLineNo">5702</span>  private WAL mockWAL() throws IOException {<a name="line.5702"></a>
+<span class="sourceLineNo">5703</span>    WAL wal = mock(WAL.class);<a name="line.5703"></a>
+<span class="sourceLineNo">5704</span>    Mockito.when(wal.append((HRegionInfo)Mockito.any(),<a name="line.5704"></a>
+<span class="sourceLineNo">5705</span>        (WALKeyImpl)Mockito.any(), (WALEdit)Mockito.any(), Mockito.anyBoolean())).<a name="line.5705"></a>
+<span class="sourceLineNo">5706</span>      thenAnswer(new Answer&lt;Long&gt;() {<a name="line.5706"></a>
+<span class="sourceLineNo">5707</span>        @Override<a name="line.5707"></a>
+<span class="sourceLineNo">5708</span>        public Long answer(InvocationOnMock invocation) throws Throwable {<a name="line.5708"></a>
+<span class="sourceLineNo">5709</span>          WALKeyImpl key = invocation.getArgument(1);<a name="line.5709"></a>
+<span class="sourceLineNo">5710</span>          MultiVersionConcurrencyControl.WriteEntry we = key.getMvcc().begin();<a name="line.5710"></a>
+<span class="sourceLineNo">5711</span>          key.setWriteEntry(we);<a name="line.5711"></a>
+<span class="sourceLineNo">5712</span>          return 1L;<a name="line.5712"></a>
+<span class="sourceLineNo">5713</span>        }<a name="line.5713"></a>
+<span class="sourceLineNo">5714</span><a name="line.5714"></a>
+<span class="sourceLineNo">5715</span>    });<a name="line.5715"></a>
+<span class="sourceLineNo">5716</span>    return wal;<a name="line.5716"></a>
+<span class="sourceLineNo">5717</span>  }<a name="line.5717"></a>
+<span class="sourceLineNo">5718</span><a name="line.5718"></a>
+<span class="sourceLineNo">5719</span>  @Test<a name="line.5719"></a>
+<span class="sourceLineNo">5720</span>  public void testCloseRegionWrittenToWAL() throws Exception {<a name="line.5720"></a>
+<span class="sourceLineNo">5721</span><a name="line.5721"></a>
+<span class="sourceLineNo">5722</span>    Path rootDir = new Path(dir + name.getMethodName());<a name="line.5722"></a>
+<span class="sourceLineNo">5723</span>    FSUtils.setRootDir(TEST_UTIL.getConfiguration(), rootDir);<a name="line.5723"></a>
+<span class="sourceLineNo">5724</span><a name="line.5724"></a>
+<span class="sourceLineNo">5725</span>    final ServerName serverName = ServerName.valueOf("testCloseRegionWrittenToWAL", 100, 42);<a name="line.5725"></a>
+<span class="sourceLineNo">5726</span>    final RegionServerServices rss = spy(TEST_UTIL.createMockRegionServerService(serverName));<a name="line.5726"></a>
+<span class="sourceLineNo">5727</span><a name="line.5727"></a>
+<span class="sourceLineNo">5728</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.5728"></a>
+<span class="sourceLineNo">5729</span>    htd.addFamily(new HColumnDescriptor(fam1));<a name="line.5729"></a>
+<span class="sourceLineNo">5730</span>    htd.addFamily(new HColumnDescriptor(fam2));<a name="line.5730"></a>
+<span class="sourceLineNo">5731</span><a name="line.5731"></a>
+<span class="sourceLineNo">5732</span>    final HRegionInfo hri = new HRegionInfo(htd.getTableName(),<a name="line.5732"></a>
+<span class="sourceLineNo">5733</span>      HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY);<a name="line.5733"></a>
+<span class="sourceLineNo">5734</span><a name="line.5734"></a>
+<span class="sourceLineNo">5735</span>    ArgumentCaptor&lt;WALEdit&gt; editCaptor = ArgumentCaptor.forClass(WALEdit.class);<a name="line.5735"></a>
+<span class="sourceLineNo">5736</span><a name="line.5736"></a>
+<span class="sourceLineNo">5737</span>    // capture append() calls<a name="line.5737"></a>
+<span class="sourceLineNo">5738</span>    WAL wal = mockWAL();<a name="line.5738"></a>
+<span class="sourceLineNo">5739</span>    when(rss.getWAL((HRegionInfo) any())).thenReturn(wal);<a name="line.5739"></a>
+<span class="sourceLineNo">5740</span><a name="line.5740"></a>
 <span class="sourceLineNo">5741</span><a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>  /**<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>   * Test RegionTooBusyException thrown when region is busy<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>   */<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>  @Test<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span>  public void testRegionTooBusy() throws IOException {<a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    byte[] family = Bytes.toBytes("family");<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>    long defaultBusyWaitDuration = CONF.getLong("hbase.busy.wait.duration",<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>      HRegion.DEFAULT_BUSY_WAIT_DURATION);<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span>    CONF.setLong("hbase.busy.wait.duration", 1000);<a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    region = initHRegion(tableName, method, CONF, family);<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>    final AtomicBoolean stopped = new AtomicBoolean(true);<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>    Thread t = new Thread(new Runnable() {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>      @Override<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      public void run() {<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>        try {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>          region.lock.writeLock().lock();<a name="line.5757"></a>
-<span class="sourceLineNo">5758</span>          stopped.set(false);<a name="line.5758"></a>
-<span class="sourceLineNo">5759</span>          while (!stopped.get()) {<a name="line.5759"></a>
-<span class="sourceLineNo">5760</span>            Thread.sleep(100);<a name="line.5760"></a>
-<span class="sourceLineNo">5761</span>          }<a name="line.5761"></a>
-<span class="sourceLineNo">5762</span>        } catch (InterruptedException ie) {<a name="line.5762"></a>
-<span class="sourceLineNo">5763</span>        } finally {<a name="line.5763"></a>
-<span class="sourceLineNo">5764</span>          region.lock.writeLock().unlock();<a name="line.5764"></a>
-<span class="sourceLineNo">5765</span>        }<a name="line.5765"></a>
-<span class="sourceLineNo">5766</span>      }<a name="line.5766"></a>
-<span class="sourceLineNo">5767</span>    });<a name="line.5767"></a>
-<span class="sourceLineNo">5768</span>    t.start();<a name="line.5768"></a>
-<span class="sourceLineNo">5769</span>    Get get = new Get(row);<a name="line.5769"></a>
-<span class="sourceLineNo">5770</span>    try {<a name="line.5770"></a>
-<span class="sourceLineNo">5771</span>      while (stopped.get()) {<a name="line.5771"></a>
-<span class="sourceLineNo">5772</span>        Thread.sleep(100);<a name="line.5772"></a>
-<span class="sourceLineNo">5773</span>      }<a name="line.5773"></a>
-<span class="sourceLineNo">5774</span>      region.get(get);<a name="line.5774"></a>
-<span class="sourceLineNo">5775</span>      fail("Should throw RegionTooBusyException");<a name="line.5775"></a>
-<span class="sourceLineNo">5776</span>    } catch (InterruptedException ie) {<a name="line.5776"></a>
-<span class="sourceLineNo">5777</span>      fail("test interrupted");<a name="line.5777"></a>
-<span class="sourceLineNo">5778</span>    } catch (RegionTooBusyException e) {<a name="line.5778"></a>
-<span class="sourceLineNo">5779</span>      // Good, expected<a name="line.5779"></a>
-<span class="sourceLineNo">5780</span>    } finally {<a name="line.5780"></a>
-<span class="sourceLineNo">5781</span>      stopped.set(true);<a name="line.5781"></a>
-<span class="sourceLineNo">5782</span>      try {<a name="line.5782"></a>
-<span class="sourceLineNo">5783</span>        t.join();<a name="line.5783"></a>
-<span class="sourceLineNo">5784</span>      } catch (Throwable e) {<a name="line.5784"></a>
-<span class="sourceLineNo">5785</span>      }<a name="line.5785"></a>
-<span class="sourceLineNo">5786</span><a name="line.5786"></a>
-<span class="sourceLineNo">5787</span>      HBaseTestingUtility.closeRegionAndWAL(region);<a name="line.5787"></a>
-<span class="sourceLineNo">5788</span>      region = null;<a name="line.5788"></a>
-<span class="sourceLineNo">5789</span>      CONF.setLong("hbase.busy.wait.duration", defaultBusyWaitDuration);<a name="line.5789"></a>
-<span class="sourceLineNo">5790</span>    }<a name="line.5790"></a>
-<span class="sourceLineNo">5791</span>  }<a name="line.5791"></a>
-<span class="sourceLineNo">5792</span><a name="line.5792"></a>
-<span class="sourceLineNo">5793</span>  @Test<a name="line.5793"></a>
-<span class="sourceLineNo">5794</span>  public void testCellTTLs() throws IOException {<a name="line.5794"></a>
-<span class="sourceLineNo">5795</span>    IncrementingEnvironmentEdge edge = new IncrementingEnvironmentEdge();<a name="line.5795"></a>
-<span class="sourceLineNo">5796</span>    EnvironmentEdgeManager.injectEdge(edge);<a name="line.5796"></a>
-<span class="sourceLineNo">5797</span><a name="line.5797"></a>
-<span class="sourceLineNo">5798</span>    final byte[] row = Bytes.toBytes("testRow");<a name="line.5798"></a>
-<span class="sourceLineNo">5799</span>    final byte[] q1 = Bytes.toBytes("q1");<a name="line.5799"></a>
-<span class="sourceLineNo">5800</span>    final byte[] q2 = Bytes.toBytes("q2");<a name="line.5800"></a>
-<span class="sourceLineNo">5801</span>    final byte[] q3 = Bytes.toBytes("q3");<a name="line.5801"></a>
-<span class="sourceLineNo">5802</span>    final byte[] q4 = Bytes.toBytes("q4");<a name="line.5802"></a>
-<span class="sourceLineNo">5803</span><a name="line.5803"></a>
-<span class="sourceLineNo">5804</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.5804"></a>
-<span class="sourceLineNo">5805</span>    HColumnDescriptor hcd = new HColumnDescriptor(fam1);<a name="line.5805"></a>
-<span class="sourceLineNo">5806</span>    hcd.setTimeToLive(10); // 10 seconds<a name="line.5806"></a>
-<span class="sourceLineNo">5807</span>    htd.addFamily(hcd);<a name="line.5807"></a>
-<span class="sourceLineNo">5808</span><a name="line.5808"></a>
-<span class="sourceLineNo">5809</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.5809"></a>
-<span class="sourceLineNo">5810</span>    conf.setInt(HFile.FORMAT_VERSION_KEY, HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.5810"></a>
-<span class="sourceLineNo">5811</span><a name="line.5811"></a>
-<span class="sourceLineNo">5812</span>    region = HBaseTestingUtility.createRegionAndWAL(new HRegionInfo(htd.getTableName(),<a name="line.5812"></a>
-<span class="sourceLineNo">5813</span>            HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY),<a name="line.5813"></a>
-<span class="sourceLineNo">5814</span>        TEST_UTIL.getDataTestDir(), conf, htd);<a name="line.5814"></a>
-<span class="sourceLineNo">5815</span>    assertNotNull(region);<a name="line.5815"></a>
-<span class="sourceLineNo">5816</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.5816"></a>
-<span class="sourceLineNo">5817</span>    // Add a cell that will expire in 5 seconds via cell TTL<a name="line.5817"></a>
-<span class="sourceLineNo">5818</span>    region.put(new Put(row).add(new KeyValue(row, fam1, q1, now,<a name="line.5818"></a>
-<span class="sourceLineNo">5819</span>      HConstants.EMPTY_BYTE_ARRAY, new ArrayBackedTag[] {<a name="line.5819"></a>
-<span class="sourceLineNo">5820</span>        // TTL tags specify ts in milliseconds<a name="line.5820"></a>
-<span class="sourceLineNo">5821</span>        new ArrayBackedTag(TagType.TTL_TAG_TYPE, Bytes.toBytes(5000L)) })));<a name="line.5821"></a>
-<span class="sourceLineNo">5822</span>    // Add a cell that will expire after 10 seconds via family setting<a name="line.5822"></a>
-<span class="sourceLineNo">5823</span>    region.put(new Put(row).addColumn(fam1, q2, now, HConstants.EMPTY_BYTE_ARRAY));<a name="line.5823"></a>
-<span class="sourceLineNo">5824</span>    // Add a cell that will expire in 15 seconds via cell TTL<a name="line.5824"></a>
-<span class="sourceLineNo">5825</span>    region.put(new Put(row).add(new KeyValue(row, fam1, q3, now + 10000 - 1,<a name="line.5825"></a>
-<span class="sourceLineNo">5826</span>      HConstants.EMPTY_BYTE_ARRAY, new ArrayBackedTag[] {<a name="line.5826"></a>
-<span class="sourceLineNo">5827</span>        // TTL tags specify ts in milliseconds<a name="line.5827"></a>
-<span class="sourceLineNo">5828</span>        new ArrayBackedTag(TagType.TTL_TAG_TYPE, Bytes.toBytes(5000L)) })));<a name="line.5828"></a>
-<span class="sourceLineNo">5829</span>    // Add a cell that will expire in 20 seconds via family setting<a name="line.5829"></a>
-<span class="sourceLineNo">5830</span>    region.put(new Put(row).addColumn(fam1, q4, now + 10000 - 1, HConstants.EMPTY_BYTE_ARRAY));<a name="line.5830"></a>
-<span class="sourceLineNo">5831</span><a name="line.5831"></a>
-<span class="sourceLineNo">5832</span>    // Flush so we are sure store scanning gets this right<a name="line.5832"></a>
-<span class="sourceLineNo">5833</span>    region.flush(true);<a name="line.5833"></a>
-<span class="sourceLineNo">5834</span><a name="line.5834"></a>
-<span class="sourceLineNo">5835</span>    // A query at time T+0 should return all cells<a name="line.5835"></a>
-<span class="sourceLineNo">5836</span>    Result r = region.get(new Get(row));<a name="line.5836"></a>
-<span class="sourceLineNo">5837</span>    assertNotNull(r.getValue(fam1, q1));<a name="line.5837"></a>
-<span class="sourceLineNo">5838</span>    assertNotNull(r.getValue(fam1, q2));<a name="line.5838"></a>
-<span class="sourceLineNo">5839</span>    assertNotNull(r.getValue(fam1, q3));<a name="line.5839"></a>
-<span class="sourceLineNo">5840</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5840"></a>
-<span class="sourceLineNo">5841</span><a name="line.5841"></a>
-<span class="sourceLineNo">5842</span>    // Increment time to T+5 seconds<a name="line.5842"></a>
-<span class="sourceLineNo">5843</span>    edge.incrementTime(5000);<a name="line.5843"></a>
-<span class="sourceLineNo">5844</span><a name="line.5844"></a>
-<span class="sourceLineNo">5845</span>    r = region.get(new Get(row));<a name="line.5845"></a>
-<span class="sourceLineNo">5846</span>    assertNull(r.getValue(fam1, q1));<a name="line.5846"></a>
-<span class="sourceLineNo">5847</span>    assertNotNull(r.getValue(fam1, q2));<a name="line.5847"></a>
-<span class="sourceLineNo">5848</span>    assertNotNull(r.getValue(fam1, q3));<a name="line.5848"></a>
-<span class="sourceLineNo">5849</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5849"></a>
-<span class="sourceLineNo">5850</span><a name="line.5850"></a>
-<span class="sourceLineNo">5851</span>    // Increment time to T+10 seconds<a name="line.5851"></a>
-<span class="sourceLineNo">5852</span>    edge.incrementTime(5000);<a name="line.5852"></a>
-<span class="sourceLineNo">5853</span><a name="line.5853"></a>
-<span class="sourceLineNo">5854</span>    r = region.get(new Get(row));<a name="line.5854"></a>
-<span class="sourceLineNo">5855</span>    assertNull(r.getValue(fam1, q1));<a name="line.5855"></a>
-<span class="sourceLineNo">5856</span>    assertNull(r.getValue(fam1, q2));<a name="line.5856"></a>
-<span class="sourceLineNo">5857</span>    assertNotNull(r.getValue(fam1, q3));<a name="line.5857"></a>
-<span class="sourceLineNo">5858</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5858"></a>
-<span class="sourceLineNo">5859</span><a name="line.5859"></a>
-<span class="sourceLineNo">5860</span>    // Increment time to T+15 seconds<a name="line.5860"></a>
-<span class="sourceLineNo">5861</span>    edge.incrementTime(5000);<a name="line.5861"></a>
-<span class="sourceLineNo">5862</span><a name="line.5862"></a>
-<span class="sourceLineNo">5863</span>    r = region.get(new Get(row));<a name="line.5863"></a>
-<span class="sourceLineNo">5864</span>    assertNull(r.getValue(fam1, q1));<a name="line.5864"></a>
-<span class="sourceLineNo">5865</span>    assertNull(r.getValue(fam1, q2));<a name="line.5865"></a>
-<span class="sourceLineNo">5866</span>    assertNull(r.getValue(fam1, q3));<a name="line.5866"></a>
-<span class="sourceLineNo">5867</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5867"></a>
-<span class="sourceLineNo">5868</span><a name="line.5868"></a>
-<span class="sourceLineNo">5869</span>    // Increment time to T+20 seconds<a name="line.5869"></a>
-<span class="sourceLineNo">5870</span>    edge.incrementTime(10000);<a name="line.5870"></a>
+<span class="sourceLineNo">5742</span>    // create and then open a region first so that it can be closed later<a name="line.5742"></a>
+<span class="sourceLineNo">5743</span>    region = HRegion.createHRegion(hri, rootDir, TEST_UTIL.getConfiguration(), htd, rss.getWAL(hri));<a name="line.5743"></a>
+<span class="sourceLineNo">5744</span>    region = HRegion.openHRegion(hri, htd, rss.getWAL(hri),<a name="line.5744"></a>
+<span class="sourceLineNo">5745</span>      TEST_UTIL.getConfiguration(), rss, null);<a name="line.5745"></a>
+<span class="sourceLineNo">5746</span><a name="line.5746"></a>
+<span class="sourceLineNo">5747</span>    // close the region<a name="line.5747"></a>
+<span class="sourceLineNo">5748</span>    region.close(false);<a name="line.5748"></a>
+<span class="sourceLineNo">5749</span><a name="line.5749"></a>
+<span class="sourceLineNo">5750</span>    // 2 times, one for region open, the other close region<a name="line.5750"></a>
+<span class="sourceLineNo">5751</span>    verify(wal, times(2)).append((HRegionInfo)any(), (WALKeyImpl)any(),<a name="line.5751"></a>
+<span class="sourceLineNo">5752</span>      editCaptor.capture(), anyBoolean());<a name="line.5752"></a>
+<span class="sourceLineNo">5753</span><a name="line.5753"></a>
+<span class="sourceLineNo">5754</span>    WALEdit edit = editCaptor.getAllValues().get(1);<a name="line.5754"></a>
+<span class="sourceLineNo">5755</span>    assertNotNull(edit);<a name="line.5755"></a>
+<span class="sourceLineNo">5756</span>    assertNotNull(edit.getCells());<a name="line.5756"></a>
+<span class="sourceLineNo">5757</span>    assertEquals(1, edit.getCells().size());<a name="line.5757"></a>
+<span class="sourceLineNo">5758</span>    RegionEventDescriptor desc = WALEdit.getRegionEventDescriptor(edit.getCells().get(0));<a name="line.5758"></a>
+<span class="sourceLineNo">5759</span>    assertNotNull(desc);<a name="line.5759"></a>
+<span class="sourceLineNo">5760</span><a name="line.5760"></a>
+<span class="sourceLineNo">5761</span>    LOG.info("RegionEventDescriptor from WAL: " + desc);<a name="line.5761"></a>
+<span class="sourceLineNo">5762</span><a name="line.5762"></a>
+<span class="sourceLineNo">5763</span>    assertEquals(RegionEventDescriptor.EventType.REGION_CLOSE, desc.getEventType());<a name="line.5763"></a>
+<span class="sourceLineNo">5764</span>    assertTrue(Bytes.equals(desc.getTableName().toByteArray(), htd.getTableName().toBytes()));<a name="line.5764"></a>
+<span class="sourceLineNo">5765</span>    assertTrue(Bytes.equals(desc.getEncodedRegionName().toByteArray(),<a name="line.5765"></a>
+<span class="sourceLineNo">5766</span>      hri.getEncodedNameAsBytes()));<a name="line.5766"></a>
+<span class="sourceLineNo">5767</span>    assertTrue(desc.getLogSequenceNumber() &gt; 0);<a name="line.5767"></a>
+<span class="sourceLineNo">5768</span>    assertEquals(serverName, ProtobufUtil.toServerName(desc.getServer()));<a name="line.5768"></a>
+<span class="sourceLineNo">5769</span>    assertEquals(2, desc.getStoresCount());<a name="line.5769"></a>
+<span class="sourceLineNo">5770</span><a name="line.5770"></a>
+<span class="sourceLineNo">5771</span>    StoreDescriptor store = desc.getStores(0);<a name="line.5771"></a>
+<span class="sourceLineNo">5772</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam1));<a name="line.5772"></a>
+<span class="sourceLineNo">5773</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam1));<a name="line.5773"></a>
+<span class="sourceLineNo">5774</span>    assertEquals(0, store.getStoreFileCount()); // no store files<a name="line.5774"></a>
+<span class="sourceLineNo">5775</span><a name="line.5775"></a>
+<span class="sourceLineNo">5776</span>    store = desc.getStores(1);<a name="line.5776"></a>
+<span class="sourceLineNo">5777</span>    assertTrue(Bytes.equals(store.getFamilyName().toByteArray(), fam2));<a name="line.5777"></a>
+<span class="sourceLineNo">5778</span>    assertEquals(store.getStoreHomeDir(), Bytes.toString(fam2));<a name="line.5778"></a>
+<span class="sourceLineNo">5779</span>    assertEquals(0, store.getStoreFileCount()); // no store files<a name="line.5779"></a>
+<span class="sourceLineNo">5780</span>  }<a name="line.5780"></a>
+<span class="sourceLineNo">5781</span><a name="line.5781"></a>
+<span class="sourceLineNo">5782</span>  /**<a name="line.5782"></a>
+<span class="sourceLineNo">5783</span>   * Test RegionTooBusyException thrown when region is busy<a name="line.5783"></a>
+<span class="sourceLineNo">5784</span>   */<a name="line.5784"></a>
+<span class="sourceLineNo">5785</span>  @Test<a name="line.5785"></a>
+<span class="sourceLineNo">5786</span>  public void testRegionTooBusy() throws IOException {<a name="line.5786"></a>
+<span class="sourceLineNo">5787</span>    byte[] family = Bytes.toBytes("family");<a name="line.5787"></a>
+<span class="sourceLineNo">5788</span>    long defaultBusyWaitDuration = CONF.getLong("hbase.busy.wait.duration",<a name="line.5788"></a>
+<span class="sourceLineNo">5789</span>      HRegion.DEFAULT_BUSY_WAIT_DURATION);<a name="line.5789"></a>
+<span class="sourceLineNo">5790</span>    CONF.setLong("hbase.busy.wait.duration", 1000);<a name="line.5790"></a>
+<span class="sourceLineNo">5791</span>    region = initHRegion(tableName, method, CONF, family);<a name="line.5791"></a>
+<span class="sourceLineNo">5792</span>    final AtomicBoolean stopped = new AtomicBoolean(true);<a name="line.5792"></a>
+<span class="sourceLineNo">5793</span>    Thread t = new Thread(new Runnable() {<a name="line.5793"></a>
+<span class="sourceLineNo">5794</span>      @Override<a name="line.5794"></a>
+<span class="sourceLineNo">5795</span>      public void run() {<a name="line.5795"></a>
+<span class="sourceLineNo">5796</span>        try {<a name="line.5796"></a>
+<span class="sourceLineNo">5797</span>          region.lock.writeLock().lock();<a name="line.5797"></a>
+<span class="sourceLineNo">5798</span>          stopped.set(false);<a name="line.5798"></a>
+<span class="sourceLineNo">5799</span>          while (!stopped.get()) {<a name="line.5799"></a>
+<span class="sourceLineNo">5800</span>            Thread.sleep(100);<a name="line.5800"></a>
+<span class="sourceLineNo">5801</span>          }<a name="line.5801"></a>
+<span class="sourceLineNo">5802</span>        } catch (InterruptedException ie) {<a name="line.5802"></a>
+<span class="sourceLineNo">5803</span>        } finally {<a name="line.5803"></a>
+<span class="sourceLineNo">5804</span>          region.lock.writeLock().unlock();<a name="line.5804"></a>
+<span class="sourceLineNo">5805</span>        }<a name="line.5805"></a>
+<span class="sourceLineNo">5806</span>      }<a name="line.5806"></a>
+<span class="sourceLineNo">5807</span>    });<a name="line.5807"></a>
+<span class="sourceLineNo">5808</span>    t.start();<a name="line.5808"></a>
+<span class="sourceLineNo">5809</span>    Get get = new Get(row);<a name="line.5809"></a>
+<span class="sourceLineNo">5810</span>    try {<a name="line.5810"></a>
+<span class="sourceLineNo">5811</span>      while (stopped.get()) {<a name="line.5811"></a>
+<span class="sourceLineNo">5812</span>        Thread.sleep(100);<a name="line.5812"></a>
+<span class="sourceLineNo">5813</span>      }<a name="line.5813"></a>
+<span class="sourceLineNo">5814</span>      region.get(get);<a name="line.5814"></a>
+<span class="sourceLineNo">5815</span>      fail("Should throw RegionTooBusyException");<a name="line.5815"></a>
+<span class="sourceLineNo">5816</span>    } catch (InterruptedException ie) {<a name="line.5816"></a>
+<span class="sourceLineNo">5817</span>      fail("test interrupted");<a name="line.5817"></a>
+<span class="sourceLineNo">5818</span>    } catch (RegionTooBusyException e) {<a name="line.5818"></a>
+<span class="sourceLineNo">5819</span>      // Good, expected<a name="line.5819"></a>
+<span class="sourceLineNo">5820</span>    } finally {<a name="line.5820"></a>
+<span class="sourceLineNo">5821</span>      stopped.set(true);<a name="line.5821"></a>
+<span class="sourceLineNo">5822</span>      try {<a name="line.5822"></a>
+<span class="sourceLineNo">5823</span>        t.join();<a name="line.5823"></a>
+<span class="sourceLineNo">5824</span>      } catch (Throwable e) {<a name="line.5824"></a>
+<span class="sourceLineNo">5825</span>      }<a name="line.5825"></a>
+<span class="sourceLineNo">5826</span><a name="line.5826"></a>
+<span class="sourceLineNo">5827</span>      HBaseTestingUtility.closeRegionAndWAL(region);<a name="line.5827"></a>
+<span class="sourceLineNo">5828</span>      region = null;<a name="line.5828"></a>
+<span class="sourceLineNo">5829</span>      CONF.setLong("hbase.busy.wait.duration", defaultBusyWaitDuration);<a name="line.5829"></a>
+<span class="sourceLineNo">5830</span>    }<a name="line.5830"></a>
+<span class="sourceLineNo">5831</span>  }<a name="line.5831"></a>
+<span class="sourceLineNo">5832</span><a name="line.5832"></a>
+<span class="sourceLineNo">5833</span>  @Test<a name="line.5833"></a>
+<span class="sourceLineNo">5834</span>  public void testCellTTLs() throws IOException {<a name="line.5834"></a>
+<span class="sourceLineNo">5835</span>    IncrementingEnvironmentEdge edge = new IncrementingEnvironmentEdge();<a name="line.5835"></a>
+<span class="sourceLineNo">5836</span>    EnvironmentEdgeManager.injectEdge(edge);<a name="line.5836"></a>
+<span class="sourceLineNo">5837</span><a name="line.5837"></a>
+<span class="sourceLineNo">5838</span>    final byte[] row = Bytes.toBytes("testRow");<a name="line.5838"></a>
+<span class="sourceLineNo">5839</span>    final byte[] q1 = Bytes.toBytes("q1");<a name="line.5839"></a>
+<span class="sourceLineNo">5840</span>    final byte[] q2 = Bytes.toBytes("q2");<a name="line.5840"></a>
+<span class="sourceLineNo">5841</span>    final byte[] q3 = Bytes.toBytes("q3");<a name="line.5841"></a>
+<span class="sourceLineNo">5842</span>    final byte[] q4 = Bytes.toBytes("q4");<a name="line.5842"></a>
+<span class="sourceLineNo">5843</span><a name="line.5843"></a>
+<span class="sourceLineNo">5844</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.5844"></a>
+<span class="sourceLineNo">5845</span>    HColumnDescriptor hcd = new HColumnDescriptor(fam1);<a name="line.5845"></a>
+<span class="sourceLineNo">5846</span>    hcd.setTimeToLive(10); // 10 seconds<a name="line.5846"></a>
+<span class="sourceLineNo">5847</span>    htd.addFamily(hcd);<a name="line.5847"></a>
+<span class="sourceLineNo">5848</span><a name="line.5848"></a>
+<span class="sourceLineNo">5849</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.5849"></a>
+<span class="sourceLineNo">5850</span>    conf.setInt(HFile.FORMAT_VERSION_KEY, HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.5850"></a>
+<span class="sourceLineNo">5851</span><a name="line.5851"></a>
+<span class="sourceLineNo">5852</span>    region = HBaseTestingUtility.createRegionAndWAL(new HRegionInfo(htd.getTableName(),<a name="line.5852"></a>
+<span class="sourceLineNo">5853</span>            HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY),<a name="line.5853"></a>
+<span class="sourceLineNo">5854</span>        TEST_UTIL.getDataTestDir(), conf, htd);<a name="line.5854"></a>
+<span class="sourceLineNo">5855</span>    assertNotNull(region);<a name="line.5855"></a>
+<span class="sourceLineNo">5856</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.5856"></a>
+<span class="sourceLineNo">5857</span>    // Add a cell that will expire in 5 seconds via cell TTL<a name="line.5857"></a>
+<span class="sourceLineNo">5858</span>    region.put(new Put(row).add(new KeyValue(row, fam1, q1, now,<a name="line.5858"></a>
+<span class="sourceLineNo">5859</span>      HConstants.EMPTY_BYTE_ARRAY, new ArrayBackedTag[] {<a name="line.5859"></a>
+<span class="sourceLineNo">5860</span>        // TTL tags specify ts in milliseconds<a name="line.5860"></a>
+<span class="sourceLineNo">5861</span>        new ArrayBackedTag(TagType.TTL_TAG_TYPE, Bytes.toBytes(5000L)) })));<a name="line.5861"></a>
+<span class="sourceLineNo">5862</span>    // Add a cell that will expire after 10 seconds via family setting<a name="line.5862"></a>
+<span class="sourceLineNo">5863</span>    region.put(new Put(row).addColumn(fam1, q2, now, HConstants.EMPTY_BYTE_ARRAY));<a name="line.5863"></a>
+<span class="sourceLineNo">5864</span>    // Add a cell that will expire in 15 seconds via cell TTL<a name="line.5864"></a>
+<span class="sourceLineNo">5865</span>    region.put(new Put(row).add(new KeyValue(row, fam1, q3, now + 10000 - 1,<a name="line.5865"></a>
+<span class="sourceLineNo">5866</span>      HConstants.EMPTY_BYTE_ARRAY, new ArrayBackedTag[] {<a name="line.5866"></a>
+<span class="sourceLineNo">5867</span>        // TTL tags specify ts in milliseconds<a name="line.5867"></a>
+<span class="sourceLineNo">5868</span>        new ArrayBackedTag(TagType.TTL_TAG_TYPE, Bytes.toBytes(5000L)) })));<a name="line.5868"></a>
+<span class="sourceLineNo">5869</span>    // Add a cell that will expire in 20 seconds via family setting<a name="line.5869"></a>
+<span class="sourceLineNo">5870</span>    region.put(new Put(row).addColumn(fam1, q4, now + 10000 - 1, HConstants.EMPTY_BYTE_ARRAY));<a name="line.5870"></a>
 <span class="sourceLineNo">5871</span><a name="line.5871"></a>
-<span class="sourceLineNo">5872</span>    r = region.get(new Get(row));<a name="line.5872"></a>
-<span class="sourceLineNo">5873</span>    assertNull(r.getValue(fam1, q1));<a name="line.5873"></a>
-<span class="sourceLineNo">5874</span>    assertNull(r.getValue(fam1, q2));<a name="line.5874"></a>
-<span class="sourceLineNo">5875</span>    assertNull(r.getValue(fam1, q3));<a name="line.5875"></a>
-<span class="sourceLineNo">5876</span>    assertNull(r.getValue(fam1, q4));<a name="line.5876"></a>
-<span class="sourceLineNo">5877</span><a name="line.5877"></a>
-<span class="sourceLineNo">5878</span>    // Fun with disappearing increments<a name="line.5878"></a>
-<span class="sourceLineNo">5879</span><a name="line.5879"></a>
-<span class="sourceLineNo">5880</span>    // Start at 1<a name="line.5880"></a>
-<span class="sourceLineNo">5881</span>    region.put(new Put(row).addColumn(fam1, q1, Bytes.toBytes(1L)));<a name="line.5881"></a>
-<span class="sourceLineNo">5882</span>    r = region.get(new Get(row));<a name="line.5882"></a>
-<span class="sourceLineNo">5883</span>    byte[] val = r.getValue(fam1, q1);<a name="line.5883"></a>
-<span class="sourceLineNo">5884</span>    assertNotNull(val);<a name="line.5884"></a>
-<span class="sourceLineNo">5885</span>    assertEquals(1L, Bytes.toLong(val));<a name="line.5885"></a>
-<span class="sourceLineNo">5886</span><a name="line.5886"></a>
-<span class="sourceLineNo">5887</span>    // Increment with a TTL of 5 seconds<a name="line.5887"></a>
-<span class="sourceLineNo">5888</span>    Increment incr = new Increment(row).addColumn(fam1, q1, 1L);<a name="line.5888"></a>
-<span class="sourceLineNo">5889</span>    incr.setTTL(5000);<a name="line.5889"></a>
-<span class="sourceLineNo">5890</span>    region.increment(incr); // 2<a name="line.5890"></a>
-<span class="sourceLineNo">5891</span><a name="line.5891"></a>
-<span class="sourceLineNo">5892</span>    // New value should be 2<a name="line.5892"></a>
-<span class="sourceLineNo">5893</span>    r = region.get(new Get(row));<a name="line.5893"></a>
-<span class="sourceLineNo">5894</span>    val = r.getValue(fam1, q1);<a name="line.5894"></a>
-<span class="sourceLineNo">5895</span>    assertNotNull(val);<a name="line.5895"></a>
-<span class="sourceLineNo">5896</span>    assertEquals(2L, Bytes.toLong(val));<a name="line.5896"></a>
-<span class="sourceLineNo">5897</span><a name="line.5897"></a>
-<span class="sourceLineNo">5898</span>    // Increment time to T+25 seconds<a name="line.5898"></a>
-<span class="sourceLineNo">5899</span>    edge.incrementTime(5000);<a name="line.5899"></a>
-<span class="sourceLineNo">5900</span><a name="line.5900"></a>
-<span class="sourceLineNo">5901</span>    // Value should be back to 1<a name="line.5901"></a>
-<span class="sourceLineNo">5902</span>    r = region.get(new Get(row));<a name="line.5902"></a>
-<span class="sourceLineNo">5903</span>    val = r.getValue(fam1, q1);<a name="line.5903"></a>
-<span class="sourceLineNo">5904</span>    assertNotNull(val);<a name="line.5904"></a>
-<span class="sourceLineNo">5905</span>    assertEquals(1L, Bytes.toLong(val));<a name="line.5905"></a>
-<span class="sourceLineNo">5906</span><a name="line.5906"></a>
-<span class="sourceLineNo">5907</span>    // Increment time to T+30 seconds<a name="line.5907"></a>
-<span class="sourceLineNo">5908</span>    edge.incrementTime(5000);<a name="line.5908"></a>
-<span class="sourceLineNo">5909</span><a name="line.5909"></a>
-<span class="sourceLineNo">5910</span>    // Original value written at T+20 should be gone now via family TTL<a name="line.5910"></a>
-<span class="sourceLineNo">5911</span>    r = region.get(new Get(row));<a name="line.5911"></a>
-<span class="sourceLineNo">5912</span>    assertNull(r.getValue(fam1, q1));<a name="line.5912"></a>
-<span class="sourceLineNo">5913</span>  }<a name="line.5913"></a>
-<span class="sourceLineNo">5914</span><a name="line.5914"></a>
-<span class="sourceLineNo">5915</span>  @Test<a name="line.5915"></a>
-<span class="sourceLineNo">5916</span>  public void testIncrementTimestampsAreMonotonic() throws IOException {<a name="line.5916"></a>
-<span class="sourceLineNo">5917</span>    region = initHRegion(tableName, method, CONF, fam1);<a name="line.5917"></a>
-<span class="sourceLineNo">5918</span>    ManualEnvironmentEdge edge = new ManualEnvironmentEdge();<a name="line.5918"></a>
-<span class="sourceLineNo">5919</span>    EnvironmentEdgeManager.injectEdge(edge);<a name="line.5919"></a>
-<span class="sourceLineNo">5920</span><a name="line.5920"></a>
-<span class="sourceLineNo">5921</span>    edge.setValue(10);<a name="line.5921"></a>
-<span class="sourceLineNo">5922</span>    Increment inc = new Increment(row);<a name="line.5922"></a>
-<span class="sourceLineNo">5923</span>    inc.setDurability(Durability.SKIP_WAL);<a name="line.5923"></a>
-<span class="sourceLineNo">5924</span>    inc.addColumn(fam1, qual1, 1L);<a name="line.5924"></a>
-<span class="sourceLineNo">5925</span>    region.increment(inc);<a name="line.5925"></a>
+<span class="sourceLineNo">5872</span>    // Flush so we are sure store scanning gets this right<a name="line.5872"></a>
+<span class="sourceLineNo">5873</span>    region.flush(true);<a name="line.5873"></a>
+<span class="sourceLineNo">5874</span><a name="line.5874"></a>
+<span class="sourceLineNo">5875</span>    // A query at time T+0 should return all cells<a name="line.5875"></a>
+<span class="sourceLineNo">5876</span>    Result r = region.get(new Get(row));<a name="line.5876"></a>
+<span class="sourceLineNo">5877</span>    assertNotNull(r.getValue(fam1, q1));<a name="line.5877"></a>
+<span class="sourceLineNo">5878</span>    assertNotNull(r.getValue(fam1, q2));<a name="line.5878"></a>
+<span class="sourceLineNo">5879</span>    assertNotNull(r.getValue(fam1, q3));<a name="line.5879"></a>
+<span class="sourceLineNo">5880</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5880"></a>
+<span class="sourceLineNo">5881</span><a name="line.5881"></a>
+<span class="sourceLineNo">5882</span>    // Increment time to T+5 seconds<a name="line.5882"></a>
+<span class="sourceLineNo">5883</span>    edge.incrementTime(5000);<a name="line.5883"></a>
+<span class="sourceLineNo">5884</span><a name="line.5884"></a>
+<span class="sourceLineNo">5885</span>    r = region.get(new Get(row));<a name="line.5885"></a>
+<span class="sourceLineNo">5886</span>    assertNull(r.getValue(fam1, q1));<a name="line.5886"></a>
+<span class="sourceLineNo">5887</span>    assertNotNull(r.getValue(fam1, q2));<a name="line.5887"></a>
+<span class="sourceLineNo">5888</span>    assertNotNull(r.getValue(fam1, q3));<a name="line.5888"></a>
+<span class="sourceLineNo">5889</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5889"></a>
+<span class="sourceLineNo">5890</span><a name="line.5890"></a>
+<span class="sourceLineNo">5891</span>    // Increment time to T+10 seconds<a name="line.5891"></a>
+<span class="sourceLineNo">5892</span>    edge.incrementTime(5000);<a name="line.5892"></a>
+<span class="sourceLineNo">5893</span><a name="line.5893"></a>
+<span class="sourceLineNo">5894</span>    r = region.get(new Get(row));<a name="line.5894"></a>
+<span class="sourceLineNo">5895</span>    assertNull(r.getValue(fam1, q1));<a name="line.5895"></a>
+<span class="sourceLineNo">5896</span>    assertNull(r.getValue(fam1, q2));<a name="line.5896"></a>
+<span class="sourceLineNo">5897</span>    assertNotNull(r.getValue(fam1, q3));<a name="line.5897"></a>
+<span class="sourceLineNo">5898</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5898"></a>
+<span class="sourceLineNo">5899</span><a name="line.5899"></a>
+<span class="sourceLineNo">5900</span>    // Increment time to T+15 seconds<a name="line.5900"></a>
+<span class="sourceLineNo">5901</span>    edge.incrementTime(5000);<a name="line.5901"></a>
+<span class="sourceLineNo">5902</span><a name="line.5902"></a>
+<span class="sourceLineNo">5903</span>    r = region.get(new Get(row));<a name="line.5903"></a>
+<span class="sourceLineNo">5904</span>    assertNull(r.getValue(fam1, q1));<a name="line.5904"></a>
+<span class="sourceLineNo">5905</span>    assertNull(r.getValue(fam1, q2));<a name="line.5905"></a>
+<span class="sourceLineNo">5906</span>    assertNull(r.getValue(fam1, q3));<a name="line.5906"></a>
+<span class="sourceLineNo">5907</span>    assertNotNull(r.getValue(fam1, q4));<a name="line.5907"></a>
+<span class="sourceLineNo">5908</span><a name="line.5908"></a>
+<span class="sourceLineNo">5909</span>    // Increment time to T+20 seconds<a name="line.5909"></a>
+<span class="sourceLineNo">5910</span>    edge.incrementTime(10000);<a name="line.5910"></a>
+<span class="sourceLineNo">5911</span><a name="line.5911"></a>
+<span class="sourceLineNo">5912</span>    r = region.get(new Get(row));<a name="line.5912"></a>
+<span class="sourceLineNo">5913</span>    assertNull(r.getValue(fam1, q1));<a name="line.5913"></a>
+<span class="sourceLineNo">5914</span>    assertNull(r.getValue(fam1, q2));<a name="line.5914"></a>
+<span class="sourceLineNo">5915</span>    assertNull(r.getValue(fam1, q3));<a name="line.5915"></a>
+<span class="sourceLineNo">5916</span>    assertNull(r.getValue(fam1, q4));<a name="line.5916"></a>
+<span class="sourceLineNo">5917</span><a name="line.5917"></a>
+<span class="sourceLineNo">5918</span>    // Fun with disappearing increments<a name="line.5918"></a>
+<span class="sourceLineNo">5919</span><a name="line.5919"></a>
+<span class="sourceLineNo">5920</span>    // Start at 1<a name="line.5920"></a>
+<span class="sourceLineNo">5921</span>    region.put(new Put(row).addColumn(fam1, q1, Bytes.toBytes(1L)));<a name="line.5921"></a>
+<span class="sourceLineNo">5922</span>    r = region.get(new Get(row));<a name="line.5922"></a>
+<span class="sourceLineNo">5923</span>    byte[] val = r.getValue(fam1, q1);<a name="line.5923"></a>
+<span class="sourceLineNo">5924</span>    assertNotNull(val);<a name="line.5924"></a>
+<span class="sourceLineNo">5925</span>    assertEquals(1L, Bytes.toLong(val));<a name="line.5925"></a>
 <span class="sourceLineNo">5926</span><a name="line.5926"></a>
-<span class="sourceLineNo">5927</span>    Result result = region.get(new Get(row));<a name="line.5927"></a>
-<span class="sourceLineNo">5928</span>    Cell c = result.getColumnLatestCell(fam1, qual1);<a name="line.5928"></a>
-<span class="sourceLineNo">5929</span>    assertNotNull(c);<a name="line.5929"></a>
-<span class="sourceLineNo">5930</span>    assertEquals(10L, c.getTimestamp());<a name="line.5930"></a>
+<span class="sourceLineNo">5927</span>    // Increment with a TTL of 5 seconds<a name="line.5927"></a>
+<span class="sourceLineNo">5928</span>    Increment incr = new Increment(row).addColumn(fam1, q1, 1L);<a name="line.5928"></a>
+<span class="sourceLineNo">5929</span>    incr.setTTL(5000);<a name="line.5929"></a>
+<span class="sourceLineNo">5930</span>    region.increment(incr); // 2<a name="line.5930"></a>
 <span class="sourceLineNo">5931</span><a name="line.5931"></a>
-<span class="sourceLineNo">5932</span>    edge.setValue(1); // clock goes back<a name="line.5932"></a>
-<span class="sourceLineNo">5933</span>    region.increment(inc);<a name="line.5933"></a>
-<span class="sourceLineNo">5934</span>    result = region.get(new Get(row));<a name="line.5934"></a>
-<span class="sourceLineNo">5935</span>    c = result.getColumnLatestCell(fam1, qual1);<a name="line.5935"></a>
-<span class="sourceLineNo">5936</span>    assertEquals(11L, c.getTimestamp());<a name="line.5936"></a>
-<span class="sourceLineNo">5937</span>    assertEquals(2L, Bytes.toLong(c.getValueArray(), c.getValueOffset(), c.getValueLength()));<a name="line.5937"></a>
-<span class="sourceLineNo">5938</span>  }<a name="line.5938"></a>
-<span class="sourceLineNo">5939</span><a name="line.5939"></a>
-<span class="sourceLineNo">5940</span>  @Test<a name="line.5940"></a>
-<span class="sourceLineNo">5941</span>  public void testAppendTimestampsAreMonotonic() throws IOException {<a name="line.5941"></a>
-<span class="sourceLineNo">5942</span>    region = initHRegion(tableName, method, CONF, fam1);<a name="line.5942"></a>
-<span class="sourceLineNo">5943</span>    ManualEnvironmentEdge edge = new ManualEnvironmentEdge();<a name="line.5943"></a>
-<span class="sourceLineNo">5944</span>    EnvironmentEdgeManager.injectEdge(edge);<a name="line.5944"></a>
-<span class="sourceLineNo">5945</span><a name="line.5945"></a>
-<span class="sourceLineNo">5946</span>    edge.setValue(10);<a name="line.5946"></a>
-<span class="sourceLineNo">5947</span>    Append a = new Append(row);<a name="line.5947"></a>
-<span class="sourceLineNo">5948</span>    a.setDurability(Durability.SKIP_WAL);<a name="line.5948"></a>
-<span class="sourceLineNo">5949</span>    a.addColumn(fam1, qual1, qual1);<a name="line.5949"></a>
-<span class="sourceLineNo">5950</span>    region.append(a);<a name="line.5950"></a>
-<span class="sourceLineNo">5951</span><a name="line.5951"></a>
-<span class="sourceLineNo">5952</span>    Result result = region.get(new Get(row));<a name="line.5952"></a>
-<span class="sourceLineNo">5953</span>    Cell c = result.getColumnLatestCell(fam1, qual1);<a name="line.5953"></a>
-<span class="sourceLineNo">5954</span>    assertNotNull(c);<a name="line.5954"></a>
-<span class="sourceLineNo">5955</span>    assertEquals(10L, c.getTimestamp());<a name="line.5955"></a>
-<span class="sourceLineNo">5956</span><a name="line.5956"></a>
-<span class="sourceLineNo">5957</span>    edge.setValue(1); // clock goes back<a name="line.5957"></a>
-<span class="sourceLineNo">5958</span>    region.append(a);<a name="line.5958"></a>
-<span class="sourceLineNo">5959</span>    result = region.get(new Get(row));<a name="line.5959"></a>
-<span class="sourceLineNo">5960</span>    c = result.getColumnLatestCell(fam1, qual1);<a name="line.5960"></a>
-<span class="sourceLineNo">5961</span>    assertEquals(11L, c.getTimestamp());<a name="line.5961"></a>
-<span class="sourceLineNo">5962</span><a name="line.5962"></a>
-<span class="sourceLineNo">5963</span>    byte[] expected = new byte[qual1.length*2];<a name="line.5963"></a>
-<span class="sourceLineNo">5964</span>    System.arraycopy(qual1, 0, expected, 0, qual1.length);<a name="line.5964"></a>
-<span class="sourceLineNo">5965</span>    System.arraycopy(qual1, 0, expected, qual1.length, qual1.length);<a name="line.5965"></a>
+<span class="sourceLineNo">5932</span>    // New value should be 2<a name="line.5932"></a>
+<span class="sourceLineNo">5933</span>    r = region.get(new Get(row));<a name="line.5933"></a>
+<span class="sourceLineNo">5934</span>    val = r.getValue(fam1, q1);<a name="line.5934"></a>
+<span class="sourceLineNo">5935</span>    assertNotNull(val);<a name="line.5935"></a>
+<span class="sourceLineNo">5936</span>    assertEquals(2L, Bytes.toLong(val));<a name="line.5936"></a>
+<span class="sourceLineNo">5937</span><a name="line.5937"></a>
+<span class="sourceLineNo">5938</span>    // Increment time to T+25 seconds<a name="line.5938"></a>
+<span class="sourceLineNo">5939</span>    edge.incrementTime(5000);<a name="line.5939"></a>
+<span class="sourceLineNo">5940</span><a name="line.5940"></a>
+<span class="sourceLineNo">5941</span>    // Value should be back to 1<a name="line.5941"></a>
+<span class="sourceLineNo">5942</span>    r = region.get(new Get(row));<a name="line.5942"></a>
+<span class="sourceLineNo">5943</span>    val = r.getValue(fam1, q1);<a name="line.5943"></a>
+<span class="sourceLineNo">5944</span>    assertNotNull(val);<a name="line.5944"></a>
+<span class="sourceLineNo">5945</span>    assertEquals(1L, Bytes.toLong(val));<a name="line.5945"></a>
+<span class="sourceLineNo">5946</span><a name="line.5946"></a>
+<span class="sourceLineNo">5947</span>    // Increment time to T+30 seconds<a name="line.5947"></a>
+<span class="sourceLineNo">5948</span>    edge.incrementTime(5000);<a name="line.5948"></a>
+<span class="sourceLineNo">5949</span><a name="line.5949"></a>
+<span class="sourceLineNo">5950</span>    // Original value written at T+20 should be gone now via family TTL<a name="line.5950"></a>
+<span class="sourceLineNo">5951</span>    r = region.get(new Get(row));<a name="line.5951"></a>
+<span class="sourceLineNo">5952</span>    assertNull(r.getValue(fam1, q1));<a name="line.5952"></a>
+<span class="sourceLineNo">5953</span>  }<a name="line.5953"></a>
+<span class="sourceLineNo">5954</span><a name="line.5954"></a>
+<span class="sourceLineNo">5955</span>  @Test<a name="line.5955"></a>
+<span class="sourceLineNo">5956</span>  public void testIncrementTimestampsAreMonotonic() throws IOException {<a name="line.5956"></a>
+<span class="sourceLineNo">5957</span>    region = initHRegion(tableName, method, CONF, fam1);<a name="line.5957"></a>
+<span class="sourceLineNo">5958</span>    ManualEnvironmentEdge edge = new ManualEnvironmentEdge();<a name="line.5958"></a>
+<span class="sourceLineNo">5959</span>    EnvironmentEdgeManager.injectEdge(edge);<a name="line.5959"></a>
+<span class="sourceLineNo">5960</span><a name="line.5960"></a>
+<span class="sourceLineNo">5961</span>    edge.setValue(10);<a name="line.5961"></a>
+<span class="sourceLineNo">5962</span>    Increment inc = new Increment(row);<a name="line.5962"></a>
+<span class="sourceLineNo">5963</span>    inc.setDurability(Durability.SKIP_WAL);<a name="line.5963"></a>
+<span class="sourceLineNo">5964</span>    inc.addColumn(fam1, qual1, 1L);<a name="line.5964"></a>
+<span class="sourceLineNo">5965</span>    region.increment(inc);<a name="line.5965"></a>
 <span class="sourceLineNo">5966</span><a name="line.5966"></a>
-<span class="sourceLineNo">5967</span>    assertTrue(Bytes.equals(c.getValueArray(), c.getValueOffset(), c.getValueLength(),<a name="line.5967"></a>
-<span class="sourceLineNo">5968</span>      expected, 0, expected.length));<a name="line.5968"></a>
-<span class="sourceLineNo">5969</span>  }<a name="line.5969"></a>
-<span class="sourceLineNo">5970</span><a name="line.5970"></a>
-<span class="sourceLineNo">5971</span>  @Test<a name="line.5971"></a>
-<span class="sourceLineNo">5972</span>  public void testCheckAndMutateTimestampsAreMonotonic() throws IOException {<a name="line.5972"></a>
-<span class="sourceLineNo">5973</span>    region = initHRegion(tableName, method, CONF, fam1);<a name="line.5973"></a>
-<span class="sourceLineNo">5974</span>    ManualEnvironmentEdge edge = new ManualEnvironmentEdge();<a name="line.5974"></a>
-<span class="sourceLineNo">5975</span>    EnvironmentEdgeManager.injectEdge(edge);<a name="line.5975"></a>
-<span class="sourceLineNo">5976</span><a name="line.5976"></a>
-<span class="sourceLineNo">5977</span>    edge.setValue(10);<a name="line.5977"></a>
-<span class="sourceLineNo">5978</span>    Put p = new Put(row);<a name="line.5978"></a>
-<span class="sourceLineNo">5979</span>    p.setDurability(Durability.SKIP_WAL);<a name="line.5979"></a>
-<span class="sourceLineNo">5980</span>    p.addColumn(fam1, qual1, qual1);<a name="line.5980"></a>
-<span class="sourceLineNo">5981</span>    region.put(p);<a name="line.5981"></a>
-<span class="sourceLineNo">5982</span><a name="line.5982"></a>
-<span class="sourceLineNo">5983</span>    Result result = region.get(new Get(row));<a name="line.5983"></a>
-<span class="sourceLineNo">5984</span>    Cell c = result.getColumnLatestCell(fam1, qual1);<a name="line.5984"></a>
-<span class="sourceLineNo">5985</span>    assertNotNull(c);<a name="line.5985"></a>
-<span class="sourceLineNo">5986</span>    assertEquals(10L, c.getTimestamp());<a name="line.5986"></a>
-<span class="sourceLineNo">5987</span><a name="line.5987"></a>
-<span class="sourceLineNo">5988</span>    edge.setValue(1); // clock goes back<a name="line.5988"></a>
-<span class="sourceLineNo">5989</span>    p = new Put(row);<a name="line.5989"></a>
-<span class="sourceLineNo">5990</span>    p.setDurability(Durability.SKIP_WAL);<a name="line.5990"></a>
-<span class="sourceLineNo">5991</span>    p.addColumn(fam1, qual1, qual2);<a name="line.5991"></a>
-<span class="sourceLineNo">5992</span>    region.checkAndMutate(row, fam1, qual1, CompareOperator.EQUAL, new BinaryComparator(qual1), p);<a name="line.5992"></a>
-<span class="sourceLineNo">5993</span>    result = region.get(new Get(row));<

<TRUNCATED>