http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c91fafb4/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide.html
----------------------------------------------------------------------
diff --git 
a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide.html
 
b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide.html
index 510e2ce..e89aec5 100644
--- 
a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide.html
+++ 
b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide.html
@@ -6425,290 +6425,297 @@
 <span class="sourceLineNo">6417</span>    int number = 
((ConnectionImplementation)admin.getConnection())<a name="line.6417"></a>
 <span class="sourceLineNo">6418</span>      
.getNumberOfCachedRegionLocations(htd.getTableName());<a name="line.6418"></a>
 <span class="sourceLineNo">6419</span>    assertEquals(results.size(), 
number);<a name="line.6419"></a>
-<span class="sourceLineNo">6420</span>  }<a name="line.6420"></a>
-<span class="sourceLineNo">6421</span><a name="line.6421"></a>
-<span class="sourceLineNo">6422</span>  @Test<a name="line.6422"></a>
-<span class="sourceLineNo">6423</span>  public void testCellSizeLimit() throws 
IOException {<a name="line.6423"></a>
-<span class="sourceLineNo">6424</span>    final TableName tableName = 
TableName.valueOf("testCellSizeLimit");<a name="line.6424"></a>
-<span class="sourceLineNo">6425</span>    HTableDescriptor htd = new 
HTableDescriptor(tableName);<a name="line.6425"></a>
-<span class="sourceLineNo">6426</span>    
htd.setConfiguration(HRegion.HBASE_MAX_CELL_SIZE_KEY, Integer.toString(10 * 
1024)); // 10K<a name="line.6426"></a>
-<span class="sourceLineNo">6427</span>    HColumnDescriptor fam = new 
HColumnDescriptor(FAMILY);<a name="line.6427"></a>
-<span class="sourceLineNo">6428</span>    htd.addFamily(fam);<a 
name="line.6428"></a>
-<span class="sourceLineNo">6429</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6429"></a>
-<span class="sourceLineNo">6430</span>    admin.createTable(htd);<a 
name="line.6430"></a>
-<span class="sourceLineNo">6431</span>    // Will succeed<a 
name="line.6431"></a>
-<span class="sourceLineNo">6432</span>    try (Table t = 
TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.6432"></a>
-<span class="sourceLineNo">6433</span>      t.put(new 
Put(ROW).addColumn(FAMILY, QUALIFIER, Bytes.toBytes(0L)));<a 
name="line.6433"></a>
-<span class="sourceLineNo">6434</span>      t.increment(new 
Increment(ROW).addColumn(FAMILY, QUALIFIER, 1L));<a name="line.6434"></a>
-<span class="sourceLineNo">6435</span>    }<a name="line.6435"></a>
-<span class="sourceLineNo">6436</span>    // Will succeed<a 
name="line.6436"></a>
-<span class="sourceLineNo">6437</span>    try (Table t = 
TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.6437"></a>
-<span class="sourceLineNo">6438</span>      t.put(new 
Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[9*1024]));<a 
name="line.6438"></a>
-<span class="sourceLineNo">6439</span>    }<a name="line.6439"></a>
-<span class="sourceLineNo">6440</span>    // Will fail<a name="line.6440"></a>
-<span class="sourceLineNo">6441</span>    try (Table t = 
TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.6441"></a>
-<span class="sourceLineNo">6442</span>      try {<a name="line.6442"></a>
-<span class="sourceLineNo">6443</span>        t.put(new 
Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024]));<a 
name="line.6443"></a>
-<span class="sourceLineNo">6444</span>        fail("Oversize cell failed to 
trigger exception");<a name="line.6444"></a>
-<span class="sourceLineNo">6445</span>      } catch (IOException e) {<a 
name="line.6445"></a>
-<span class="sourceLineNo">6446</span>        // expected<a 
name="line.6446"></a>
-<span class="sourceLineNo">6447</span>      }<a name="line.6447"></a>
-<span class="sourceLineNo">6448</span>      try {<a name="line.6448"></a>
-<span class="sourceLineNo">6449</span>        t.append(new 
Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024]));<a 
name="line.6449"></a>
-<span class="sourceLineNo">6450</span>        fail("Oversize cell failed to 
trigger exception");<a name="line.6450"></a>
-<span class="sourceLineNo">6451</span>      } catch (IOException e) {<a 
name="line.6451"></a>
-<span class="sourceLineNo">6452</span>        // expected<a 
name="line.6452"></a>
-<span class="sourceLineNo">6453</span>      }<a name="line.6453"></a>
-<span class="sourceLineNo">6454</span>    }<a name="line.6454"></a>
-<span class="sourceLineNo">6455</span>  }<a name="line.6455"></a>
-<span class="sourceLineNo">6456</span><a name="line.6456"></a>
-<span class="sourceLineNo">6457</span>  @Test<a name="line.6457"></a>
-<span class="sourceLineNo">6458</span>  public void 
testDeleteSpecifiedVersionOfSpecifiedColumn() throws Exception {<a 
name="line.6458"></a>
-<span class="sourceLineNo">6459</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6459"></a>
-<span class="sourceLineNo">6460</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6460"></a>
-<span class="sourceLineNo">6461</span><a name="line.6461"></a>
-<span class="sourceLineNo">6462</span>    byte[][] VALUES = makeN(VALUE, 5);<a 
name="line.6462"></a>
-<span class="sourceLineNo">6463</span>    long[] ts = { 1000, 2000, 3000, 
4000, 5000 };<a name="line.6463"></a>
-<span class="sourceLineNo">6464</span><a name="line.6464"></a>
-<span class="sourceLineNo">6465</span>    Table ht = 
TEST_UTIL.createTable(tableName, FAMILY, 5);<a name="line.6465"></a>
-<span class="sourceLineNo">6466</span><a name="line.6466"></a>
-<span class="sourceLineNo">6467</span>    Put put = new Put(ROW);<a 
name="line.6467"></a>
-<span class="sourceLineNo">6468</span>    // Put version 1000,2000,3000,4000 
of column FAMILY:QUALIFIER<a name="line.6468"></a>
-<span class="sourceLineNo">6469</span>    for (int t = 0; t &lt; 4; t++) {<a 
name="line.6469"></a>
-<span class="sourceLineNo">6470</span>      put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUES[t]);<a name="line.6470"></a>
-<span class="sourceLineNo">6471</span>    }<a name="line.6471"></a>
-<span class="sourceLineNo">6472</span>    ht.put(put);<a name="line.6472"></a>
+<span class="sourceLineNo">6420</span>    ConnectionImplementation conn = 
((ConnectionImplementation)admin.getConnection());<a name="line.6420"></a>
+<span class="sourceLineNo">6421</span>    assertNotNull("Can't get cached 
location for row aaa",<a name="line.6421"></a>
+<span class="sourceLineNo">6422</span>        
conn.getCachedLocation(htd.getTableName(),Bytes.toBytes("aaa")));<a 
name="line.6422"></a>
+<span class="sourceLineNo">6423</span>    for(byte[] 
startKey:HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE){<a name="line.6423"></a>
+<span class="sourceLineNo">6424</span>      assertNotNull("Can't get cached 
location for row "+<a name="line.6424"></a>
+<span class="sourceLineNo">6425</span>        
Bytes.toString(startKey),(conn.getCachedLocation(htd.getTableName(),startKey)));<a
 name="line.6425"></a>
+<span class="sourceLineNo">6426</span>    }<a name="line.6426"></a>
+<span class="sourceLineNo">6427</span>  }<a name="line.6427"></a>
+<span class="sourceLineNo">6428</span><a name="line.6428"></a>
+<span class="sourceLineNo">6429</span>  @Test<a name="line.6429"></a>
+<span class="sourceLineNo">6430</span>  public void testCellSizeLimit() throws 
IOException {<a name="line.6430"></a>
+<span class="sourceLineNo">6431</span>    final TableName tableName = 
TableName.valueOf("testCellSizeLimit");<a name="line.6431"></a>
+<span class="sourceLineNo">6432</span>    HTableDescriptor htd = new 
HTableDescriptor(tableName);<a name="line.6432"></a>
+<span class="sourceLineNo">6433</span>    
htd.setConfiguration(HRegion.HBASE_MAX_CELL_SIZE_KEY, Integer.toString(10 * 
1024)); // 10K<a name="line.6433"></a>
+<span class="sourceLineNo">6434</span>    HColumnDescriptor fam = new 
HColumnDescriptor(FAMILY);<a name="line.6434"></a>
+<span class="sourceLineNo">6435</span>    htd.addFamily(fam);<a 
name="line.6435"></a>
+<span class="sourceLineNo">6436</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6436"></a>
+<span class="sourceLineNo">6437</span>    admin.createTable(htd);<a 
name="line.6437"></a>
+<span class="sourceLineNo">6438</span>    // Will succeed<a 
name="line.6438"></a>
+<span class="sourceLineNo">6439</span>    try (Table t = 
TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.6439"></a>
+<span class="sourceLineNo">6440</span>      t.put(new 
Put(ROW).addColumn(FAMILY, QUALIFIER, Bytes.toBytes(0L)));<a 
name="line.6440"></a>
+<span class="sourceLineNo">6441</span>      t.increment(new 
Increment(ROW).addColumn(FAMILY, QUALIFIER, 1L));<a name="line.6441"></a>
+<span class="sourceLineNo">6442</span>    }<a name="line.6442"></a>
+<span class="sourceLineNo">6443</span>    // Will succeed<a 
name="line.6443"></a>
+<span class="sourceLineNo">6444</span>    try (Table t = 
TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.6444"></a>
+<span class="sourceLineNo">6445</span>      t.put(new 
Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[9*1024]));<a 
name="line.6445"></a>
+<span class="sourceLineNo">6446</span>    }<a name="line.6446"></a>
+<span class="sourceLineNo">6447</span>    // Will fail<a name="line.6447"></a>
+<span class="sourceLineNo">6448</span>    try (Table t = 
TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.6448"></a>
+<span class="sourceLineNo">6449</span>      try {<a name="line.6449"></a>
+<span class="sourceLineNo">6450</span>        t.put(new 
Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024]));<a 
name="line.6450"></a>
+<span class="sourceLineNo">6451</span>        fail("Oversize cell failed to 
trigger exception");<a name="line.6451"></a>
+<span class="sourceLineNo">6452</span>      } catch (IOException e) {<a 
name="line.6452"></a>
+<span class="sourceLineNo">6453</span>        // expected<a 
name="line.6453"></a>
+<span class="sourceLineNo">6454</span>      }<a name="line.6454"></a>
+<span class="sourceLineNo">6455</span>      try {<a name="line.6455"></a>
+<span class="sourceLineNo">6456</span>        t.append(new 
Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024]));<a 
name="line.6456"></a>
+<span class="sourceLineNo">6457</span>        fail("Oversize cell failed to 
trigger exception");<a name="line.6457"></a>
+<span class="sourceLineNo">6458</span>      } catch (IOException e) {<a 
name="line.6458"></a>
+<span class="sourceLineNo">6459</span>        // expected<a 
name="line.6459"></a>
+<span class="sourceLineNo">6460</span>      }<a name="line.6460"></a>
+<span class="sourceLineNo">6461</span>    }<a name="line.6461"></a>
+<span class="sourceLineNo">6462</span>  }<a name="line.6462"></a>
+<span class="sourceLineNo">6463</span><a name="line.6463"></a>
+<span class="sourceLineNo">6464</span>  @Test<a name="line.6464"></a>
+<span class="sourceLineNo">6465</span>  public void 
testDeleteSpecifiedVersionOfSpecifiedColumn() throws Exception {<a 
name="line.6465"></a>
+<span class="sourceLineNo">6466</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6466"></a>
+<span class="sourceLineNo">6467</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6467"></a>
+<span class="sourceLineNo">6468</span><a name="line.6468"></a>
+<span class="sourceLineNo">6469</span>    byte[][] VALUES = makeN(VALUE, 5);<a 
name="line.6469"></a>
+<span class="sourceLineNo">6470</span>    long[] ts = { 1000, 2000, 3000, 
4000, 5000 };<a name="line.6470"></a>
+<span class="sourceLineNo">6471</span><a name="line.6471"></a>
+<span class="sourceLineNo">6472</span>    Table ht = 
TEST_UTIL.createTable(tableName, FAMILY, 5);<a name="line.6472"></a>
 <span class="sourceLineNo">6473</span><a name="line.6473"></a>
-<span class="sourceLineNo">6474</span>    Delete delete = new Delete(ROW);<a 
name="line.6474"></a>
-<span class="sourceLineNo">6475</span>    // Delete version 3000 of column 
FAMILY:QUALIFIER<a name="line.6475"></a>
-<span class="sourceLineNo">6476</span>    delete.addColumn(FAMILY, QUALIFIER, 
ts[2]);<a name="line.6476"></a>
-<span class="sourceLineNo">6477</span>    ht.delete(delete);<a 
name="line.6477"></a>
-<span class="sourceLineNo">6478</span><a name="line.6478"></a>
-<span class="sourceLineNo">6479</span>    Get get = new Get(ROW);<a 
name="line.6479"></a>
-<span class="sourceLineNo">6480</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6480"></a>
-<span class="sourceLineNo">6481</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6481"></a>
-<span class="sourceLineNo">6482</span>    Result result = ht.get(get);<a 
name="line.6482"></a>
-<span class="sourceLineNo">6483</span>    // verify version 1000,2000,4000 
remains for column FAMILY:QUALIFIER<a name="line.6483"></a>
-<span class="sourceLineNo">6484</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[1], ts[3] }, new byte[][] {<a 
name="line.6484"></a>
-<span class="sourceLineNo">6485</span>        VALUES[0], VALUES[1], VALUES[3] 
}, 0, 2);<a name="line.6485"></a>
-<span class="sourceLineNo">6486</span><a name="line.6486"></a>
-<span class="sourceLineNo">6487</span>    delete = new Delete(ROW);<a 
name="line.6487"></a>
-<span class="sourceLineNo">6488</span>    // Delete a version 5000 of column 
FAMILY:QUALIFIER which didn't exist<a name="line.6488"></a>
-<span class="sourceLineNo">6489</span>    delete.addColumn(FAMILY, QUALIFIER, 
ts[4]);<a name="line.6489"></a>
-<span class="sourceLineNo">6490</span>    ht.delete(delete);<a 
name="line.6490"></a>
-<span class="sourceLineNo">6491</span><a name="line.6491"></a>
-<span class="sourceLineNo">6492</span>    get = new Get(ROW);<a 
name="line.6492"></a>
-<span class="sourceLineNo">6493</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6493"></a>
-<span class="sourceLineNo">6494</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6494"></a>
-<span class="sourceLineNo">6495</span>    result = ht.get(get);<a 
name="line.6495"></a>
-<span class="sourceLineNo">6496</span>    // verify version 1000,2000,4000 
remains for column FAMILY:QUALIFIER<a name="line.6496"></a>
-<span class="sourceLineNo">6497</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[1], ts[3] }, new byte[][] {<a 
name="line.6497"></a>
-<span class="sourceLineNo">6498</span>        VALUES[0], VALUES[1], VALUES[3] 
}, 0, 2);<a name="line.6498"></a>
-<span class="sourceLineNo">6499</span><a name="line.6499"></a>
-<span class="sourceLineNo">6500</span>    ht.close();<a name="line.6500"></a>
-<span class="sourceLineNo">6501</span>    admin.close();<a 
name="line.6501"></a>
-<span class="sourceLineNo">6502</span>  }<a name="line.6502"></a>
-<span class="sourceLineNo">6503</span><a name="line.6503"></a>
-<span class="sourceLineNo">6504</span>  @Test<a name="line.6504"></a>
-<span class="sourceLineNo">6505</span>  public void 
testDeleteLatestVersionOfSpecifiedColumn() throws Exception {<a 
name="line.6505"></a>
-<span class="sourceLineNo">6506</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6506"></a>
-<span class="sourceLineNo">6507</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6507"></a>
-<span class="sourceLineNo">6508</span><a name="line.6508"></a>
-<span class="sourceLineNo">6509</span>    byte[][] VALUES = makeN(VALUE, 5);<a 
name="line.6509"></a>
-<span class="sourceLineNo">6510</span>    long[] ts = { 1000, 2000, 3000, 
4000, 5000 };<a name="line.6510"></a>
-<span class="sourceLineNo">6511</span><a name="line.6511"></a>
-<span class="sourceLineNo">6512</span>    Table ht = 
TEST_UTIL.createTable(tableName, FAMILY, 5);<a name="line.6512"></a>
-<span class="sourceLineNo">6513</span><a name="line.6513"></a>
-<span class="sourceLineNo">6514</span>    Put put = new Put(ROW);<a 
name="line.6514"></a>
-<span class="sourceLineNo">6515</span>    // Put version 1000,2000,3000,4000 
of column FAMILY:QUALIFIER<a name="line.6515"></a>
-<span class="sourceLineNo">6516</span>    for (int t = 0; t &lt; 4; t++) {<a 
name="line.6516"></a>
-<span class="sourceLineNo">6517</span>      put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUES[t]);<a name="line.6517"></a>
-<span class="sourceLineNo">6518</span>    }<a name="line.6518"></a>
-<span class="sourceLineNo">6519</span>    ht.put(put);<a name="line.6519"></a>
+<span class="sourceLineNo">6474</span>    Put put = new Put(ROW);<a 
name="line.6474"></a>
+<span class="sourceLineNo">6475</span>    // Put version 1000,2000,3000,4000 
of column FAMILY:QUALIFIER<a name="line.6475"></a>
+<span class="sourceLineNo">6476</span>    for (int t = 0; t &lt; 4; t++) {<a 
name="line.6476"></a>
+<span class="sourceLineNo">6477</span>      put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUES[t]);<a name="line.6477"></a>
+<span class="sourceLineNo">6478</span>    }<a name="line.6478"></a>
+<span class="sourceLineNo">6479</span>    ht.put(put);<a name="line.6479"></a>
+<span class="sourceLineNo">6480</span><a name="line.6480"></a>
+<span class="sourceLineNo">6481</span>    Delete delete = new Delete(ROW);<a 
name="line.6481"></a>
+<span class="sourceLineNo">6482</span>    // Delete version 3000 of column 
FAMILY:QUALIFIER<a name="line.6482"></a>
+<span class="sourceLineNo">6483</span>    delete.addColumn(FAMILY, QUALIFIER, 
ts[2]);<a name="line.6483"></a>
+<span class="sourceLineNo">6484</span>    ht.delete(delete);<a 
name="line.6484"></a>
+<span class="sourceLineNo">6485</span><a name="line.6485"></a>
+<span class="sourceLineNo">6486</span>    Get get = new Get(ROW);<a 
name="line.6486"></a>
+<span class="sourceLineNo">6487</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6487"></a>
+<span class="sourceLineNo">6488</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6488"></a>
+<span class="sourceLineNo">6489</span>    Result result = ht.get(get);<a 
name="line.6489"></a>
+<span class="sourceLineNo">6490</span>    // verify version 1000,2000,4000 
remains for column FAMILY:QUALIFIER<a name="line.6490"></a>
+<span class="sourceLineNo">6491</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[1], ts[3] }, new byte[][] {<a 
name="line.6491"></a>
+<span class="sourceLineNo">6492</span>        VALUES[0], VALUES[1], VALUES[3] 
}, 0, 2);<a name="line.6492"></a>
+<span class="sourceLineNo">6493</span><a name="line.6493"></a>
+<span class="sourceLineNo">6494</span>    delete = new Delete(ROW);<a 
name="line.6494"></a>
+<span class="sourceLineNo">6495</span>    // Delete a version 5000 of column 
FAMILY:QUALIFIER which didn't exist<a name="line.6495"></a>
+<span class="sourceLineNo">6496</span>    delete.addColumn(FAMILY, QUALIFIER, 
ts[4]);<a name="line.6496"></a>
+<span class="sourceLineNo">6497</span>    ht.delete(delete);<a 
name="line.6497"></a>
+<span class="sourceLineNo">6498</span><a name="line.6498"></a>
+<span class="sourceLineNo">6499</span>    get = new Get(ROW);<a 
name="line.6499"></a>
+<span class="sourceLineNo">6500</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6500"></a>
+<span class="sourceLineNo">6501</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6501"></a>
+<span class="sourceLineNo">6502</span>    result = ht.get(get);<a 
name="line.6502"></a>
+<span class="sourceLineNo">6503</span>    // verify version 1000,2000,4000 
remains for column FAMILY:QUALIFIER<a name="line.6503"></a>
+<span class="sourceLineNo">6504</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[1], ts[3] }, new byte[][] {<a 
name="line.6504"></a>
+<span class="sourceLineNo">6505</span>        VALUES[0], VALUES[1], VALUES[3] 
}, 0, 2);<a name="line.6505"></a>
+<span class="sourceLineNo">6506</span><a name="line.6506"></a>
+<span class="sourceLineNo">6507</span>    ht.close();<a name="line.6507"></a>
+<span class="sourceLineNo">6508</span>    admin.close();<a 
name="line.6508"></a>
+<span class="sourceLineNo">6509</span>  }<a name="line.6509"></a>
+<span class="sourceLineNo">6510</span><a name="line.6510"></a>
+<span class="sourceLineNo">6511</span>  @Test<a name="line.6511"></a>
+<span class="sourceLineNo">6512</span>  public void 
testDeleteLatestVersionOfSpecifiedColumn() throws Exception {<a 
name="line.6512"></a>
+<span class="sourceLineNo">6513</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6513"></a>
+<span class="sourceLineNo">6514</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6514"></a>
+<span class="sourceLineNo">6515</span><a name="line.6515"></a>
+<span class="sourceLineNo">6516</span>    byte[][] VALUES = makeN(VALUE, 5);<a 
name="line.6516"></a>
+<span class="sourceLineNo">6517</span>    long[] ts = { 1000, 2000, 3000, 
4000, 5000 };<a name="line.6517"></a>
+<span class="sourceLineNo">6518</span><a name="line.6518"></a>
+<span class="sourceLineNo">6519</span>    Table ht = 
TEST_UTIL.createTable(tableName, FAMILY, 5);<a name="line.6519"></a>
 <span class="sourceLineNo">6520</span><a name="line.6520"></a>
-<span class="sourceLineNo">6521</span>    Delete delete = new Delete(ROW);<a 
name="line.6521"></a>
-<span class="sourceLineNo">6522</span>    // Delete latest version of column 
FAMILY:QUALIFIER<a name="line.6522"></a>
-<span class="sourceLineNo">6523</span>    delete.addColumn(FAMILY, 
QUALIFIER);<a name="line.6523"></a>
-<span class="sourceLineNo">6524</span>    ht.delete(delete);<a 
name="line.6524"></a>
-<span class="sourceLineNo">6525</span><a name="line.6525"></a>
-<span class="sourceLineNo">6526</span>    Get get = new Get(ROW);<a 
name="line.6526"></a>
-<span class="sourceLineNo">6527</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6527"></a>
-<span class="sourceLineNo">6528</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6528"></a>
-<span class="sourceLineNo">6529</span>    Result result = ht.get(get);<a 
name="line.6529"></a>
-<span class="sourceLineNo">6530</span>    // verify version 1000,2000,3000 
remains for column FAMILY:QUALIFIER<a name="line.6530"></a>
-<span class="sourceLineNo">6531</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[1], ts[2] }, new byte[][] {<a 
name="line.6531"></a>
-<span class="sourceLineNo">6532</span>        VALUES[0], VALUES[1], VALUES[2] 
}, 0, 2);<a name="line.6532"></a>
-<span class="sourceLineNo">6533</span><a name="line.6533"></a>
-<span class="sourceLineNo">6534</span>    delete = new Delete(ROW);<a 
name="line.6534"></a>
-<span class="sourceLineNo">6535</span>    // Delete two latest version of 
column FAMILY:QUALIFIER<a name="line.6535"></a>
-<span class="sourceLineNo">6536</span>    delete.addColumn(FAMILY, 
QUALIFIER);<a name="line.6536"></a>
-<span class="sourceLineNo">6537</span>    delete.addColumn(FAMILY, 
QUALIFIER);<a name="line.6537"></a>
-<span class="sourceLineNo">6538</span>    ht.delete(delete);<a 
name="line.6538"></a>
-<span class="sourceLineNo">6539</span><a name="line.6539"></a>
-<span class="sourceLineNo">6540</span>    get = new Get(ROW);<a 
name="line.6540"></a>
-<span class="sourceLineNo">6541</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6541"></a>
-<span class="sourceLineNo">6542</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6542"></a>
-<span class="sourceLineNo">6543</span>    result = ht.get(get);<a 
name="line.6543"></a>
-<span class="sourceLineNo">6544</span>    // verify version 1000 remains for 
column FAMILY:QUALIFIER<a name="line.6544"></a>
-<span class="sourceLineNo">6545</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0] }, new byte[][] { VALUES[0] },<a 
name="line.6545"></a>
-<span class="sourceLineNo">6546</span>      0, 0);<a name="line.6546"></a>
-<span class="sourceLineNo">6547</span><a name="line.6547"></a>
-<span class="sourceLineNo">6548</span>    put = new Put(ROW);<a 
name="line.6548"></a>
-<span class="sourceLineNo">6549</span>    // Put a version 5000 of column 
FAMILY:QUALIFIER<a name="line.6549"></a>
-<span class="sourceLineNo">6550</span>    put.addColumn(FAMILY, QUALIFIER, 
ts[4], VALUES[4]);<a name="line.6550"></a>
-<span class="sourceLineNo">6551</span>    ht.put(put);<a name="line.6551"></a>
-<span class="sourceLineNo">6552</span><a name="line.6552"></a>
-<span class="sourceLineNo">6553</span>    get = new Get(ROW);<a 
name="line.6553"></a>
-<span class="sourceLineNo">6554</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6554"></a>
-<span class="sourceLineNo">6555</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6555"></a>
-<span class="sourceLineNo">6556</span>    result = ht.get(get);<a 
name="line.6556"></a>
-<span class="sourceLineNo">6557</span>    // verify version 1000,5000 remains 
for column FAMILY:QUALIFIER<a name="line.6557"></a>
-<span class="sourceLineNo">6558</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[4] }, new byte[][] {<a name="line.6558"></a>
-<span class="sourceLineNo">6559</span>        VALUES[0], VALUES[4] }, 0, 1);<a 
name="line.6559"></a>
-<span class="sourceLineNo">6560</span><a name="line.6560"></a>
-<span class="sourceLineNo">6561</span>    ht.close();<a name="line.6561"></a>
-<span class="sourceLineNo">6562</span>    admin.close();<a 
name="line.6562"></a>
-<span class="sourceLineNo">6563</span>  }<a name="line.6563"></a>
-<span class="sourceLineNo">6564</span><a name="line.6564"></a>
-<span class="sourceLineNo">6565</span>  /**<a name="line.6565"></a>
-<span class="sourceLineNo">6566</span>   * Test for HBASE-17125<a 
name="line.6566"></a>
-<span class="sourceLineNo">6567</span>   */<a name="line.6567"></a>
-<span class="sourceLineNo">6568</span>  @Test<a name="line.6568"></a>
-<span class="sourceLineNo">6569</span>  public void testReadWithFilter() 
throws Exception {<a name="line.6569"></a>
-<span class="sourceLineNo">6570</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6570"></a>
-<span class="sourceLineNo">6571</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6571"></a>
-<span class="sourceLineNo">6572</span>    Table table = 
TEST_UTIL.createTable(tableName, FAMILY, 3);<a name="line.6572"></a>
-<span class="sourceLineNo">6573</span><a name="line.6573"></a>
-<span class="sourceLineNo">6574</span>    byte[] VALUEA = 
Bytes.toBytes("value-a");<a name="line.6574"></a>
-<span class="sourceLineNo">6575</span>    byte[] VALUEB = 
Bytes.toBytes("value-b");<a name="line.6575"></a>
-<span class="sourceLineNo">6576</span>    long[] ts = { 1000, 2000, 3000, 4000 
};<a name="line.6576"></a>
-<span class="sourceLineNo">6577</span><a name="line.6577"></a>
-<span class="sourceLineNo">6578</span>    Put put = new Put(ROW);<a 
name="line.6578"></a>
-<span class="sourceLineNo">6579</span>    // Put version 1000,2000,3000,4000 
of column FAMILY:QUALIFIER<a name="line.6579"></a>
-<span class="sourceLineNo">6580</span>    for (int t = 0; t &lt;= 3; t++) {<a 
name="line.6580"></a>
-<span class="sourceLineNo">6581</span>      if (t &lt;= 1) {<a 
name="line.6581"></a>
-<span class="sourceLineNo">6582</span>        put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUEA);<a name="line.6582"></a>
-<span class="sourceLineNo">6583</span>      } else {<a name="line.6583"></a>
-<span class="sourceLineNo">6584</span>        put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUEB);<a name="line.6584"></a>
-<span class="sourceLineNo">6585</span>      }<a name="line.6585"></a>
-<span class="sourceLineNo">6586</span>    }<a name="line.6586"></a>
-<span class="sourceLineNo">6587</span>    table.put(put);<a 
name="line.6587"></a>
-<span class="sourceLineNo">6588</span><a name="line.6588"></a>
-<span class="sourceLineNo">6589</span>    Scan scan =<a name="line.6589"></a>
-<span class="sourceLineNo">6590</span>        new Scan().setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6590"></a>
-<span class="sourceLineNo">6591</span>            .setMaxVersions(3);<a 
name="line.6591"></a>
-<span class="sourceLineNo">6592</span>    ResultScanner scanner = 
table.getScanner(scan);<a name="line.6592"></a>
-<span class="sourceLineNo">6593</span>    Result result = scanner.next();<a 
name="line.6593"></a>
-<span class="sourceLineNo">6594</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6594"></a>
-<span class="sourceLineNo">6595</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6595"></a>
-<span class="sourceLineNo">6596</span>      0);<a name="line.6596"></a>
-<span class="sourceLineNo">6597</span><a name="line.6597"></a>
-<span class="sourceLineNo">6598</span>    Get get =<a name="line.6598"></a>
-<span class="sourceLineNo">6599</span>        new Get(ROW)<a 
name="line.6599"></a>
-<span class="sourceLineNo">6600</span>            .setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6600"></a>
-<span class="sourceLineNo">6601</span>            .setMaxVersions(3);<a 
name="line.6601"></a>
-<span class="sourceLineNo">6602</span>    result = table.get(get);<a 
name="line.6602"></a>
-<span class="sourceLineNo">6603</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6603"></a>
-<span class="sourceLineNo">6604</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6604"></a>
-<span class="sourceLineNo">6605</span>      0);<a name="line.6605"></a>
-<span class="sourceLineNo">6606</span><a name="line.6606"></a>
-<span class="sourceLineNo">6607</span>    // Test with max versions 1, it 
should still read ts[1]<a name="line.6607"></a>
-<span class="sourceLineNo">6608</span>    scan =<a name="line.6608"></a>
-<span class="sourceLineNo">6609</span>        new Scan().setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6609"></a>
-<span class="sourceLineNo">6610</span>            .setMaxVersions(1);<a 
name="line.6610"></a>
-<span class="sourceLineNo">6611</span>    scanner = table.getScanner(scan);<a 
name="line.6611"></a>
-<span class="sourceLineNo">6612</span>    result = scanner.next();<a 
name="line.6612"></a>
-<span class="sourceLineNo">6613</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6613"></a>
-<span class="sourceLineNo">6614</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6614"></a>
-<span class="sourceLineNo">6615</span>      0);<a name="line.6615"></a>
-<span class="sourceLineNo">6616</span><a name="line.6616"></a>
-<span class="sourceLineNo">6617</span>    // Test with max versions 1, it 
should still read ts[1]<a name="line.6617"></a>
-<span class="sourceLineNo">6618</span>    get =<a name="line.6618"></a>
-<span class="sourceLineNo">6619</span>        new Get(ROW)<a 
name="line.6619"></a>
-<span class="sourceLineNo">6620</span>            .setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6620"></a>
-<span class="sourceLineNo">6621</span>            .setMaxVersions(1);<a 
name="line.6621"></a>
-<span class="sourceLineNo">6622</span>    result = table.get(get);<a 
name="line.6622"></a>
-<span class="sourceLineNo">6623</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6623"></a>
-<span class="sourceLineNo">6624</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6624"></a>
-<span class="sourceLineNo">6625</span>      0);<a name="line.6625"></a>
-<span class="sourceLineNo">6626</span><a name="line.6626"></a>
-<span class="sourceLineNo">6627</span>    // Test with max versions 5, it 
should still read ts[1]<a name="line.6627"></a>
-<span class="sourceLineNo">6628</span>    scan =<a name="line.6628"></a>
-<span class="sourceLineNo">6629</span>        new Scan().setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6629"></a>
-<span class="sourceLineNo">6630</span>            .setMaxVersions(5);<a 
name="line.6630"></a>
-<span class="sourceLineNo">6631</span>    scanner = table.getScanner(scan);<a 
name="line.6631"></a>
-<span class="sourceLineNo">6632</span>    result = scanner.next();<a 
name="line.6632"></a>
-<span class="sourceLineNo">6633</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6633"></a>
-<span class="sourceLineNo">6634</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6634"></a>
-<span class="sourceLineNo">6635</span>      0);<a name="line.6635"></a>
-<span class="sourceLineNo">6636</span><a name="line.6636"></a>
-<span class="sourceLineNo">6637</span>    // Test with max versions 5, it 
should still read ts[1]<a name="line.6637"></a>
-<span class="sourceLineNo">6638</span>    get =<a name="line.6638"></a>
-<span class="sourceLineNo">6639</span>        new Get(ROW)<a 
name="line.6639"></a>
-<span class="sourceLineNo">6640</span>            .setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6640"></a>
-<span class="sourceLineNo">6641</span>            .setMaxVersions(5);<a 
name="line.6641"></a>
-<span class="sourceLineNo">6642</span>    result = table.get(get);<a 
name="line.6642"></a>
-<span class="sourceLineNo">6643</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6643"></a>
-<span class="sourceLineNo">6644</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6644"></a>
-<span class="sourceLineNo">6645</span>      0);<a name="line.6645"></a>
-<span class="sourceLineNo">6646</span><a name="line.6646"></a>
-<span class="sourceLineNo">6647</span>    table.close();<a 
name="line.6647"></a>
-<span class="sourceLineNo">6648</span>    admin.close();<a 
name="line.6648"></a>
-<span class="sourceLineNo">6649</span>  }<a name="line.6649"></a>
-<span class="sourceLineNo">6650</span><a name="line.6650"></a>
-<span class="sourceLineNo">6651</span>  @Test<a name="line.6651"></a>
-<span class="sourceLineNo">6652</span>  public void testCellUtilTypeMethods() 
throws IOException {<a name="line.6652"></a>
-<span class="sourceLineNo">6653</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6653"></a>
-<span class="sourceLineNo">6654</span>    Table table = 
TEST_UTIL.createTable(tableName, FAMILY);<a name="line.6654"></a>
-<span class="sourceLineNo">6655</span><a name="line.6655"></a>
-<span class="sourceLineNo">6656</span>    final byte[] row = 
Bytes.toBytes("p");<a name="line.6656"></a>
-<span class="sourceLineNo">6657</span>    Put p = new Put(row);<a 
name="line.6657"></a>
-<span class="sourceLineNo">6658</span>    p.addColumn(FAMILY, QUALIFIER, 
VALUE);<a name="line.6658"></a>
-<span class="sourceLineNo">6659</span>    table.put(p);<a name="line.6659"></a>
-<span class="sourceLineNo">6660</span><a name="line.6660"></a>
-<span class="sourceLineNo">6661</span>    try (ResultScanner scanner = 
table.getScanner(new Scan())) {<a name="line.6661"></a>
-<span class="sourceLineNo">6662</span>      Result result = scanner.next();<a 
name="line.6662"></a>
-<span class="sourceLineNo">6663</span>      assertNotNull(result);<a 
name="line.6663"></a>
-<span class="sourceLineNo">6664</span>      CellScanner cs = 
result.cellScanner();<a name="line.6664"></a>
-<span class="sourceLineNo">6665</span>      assertTrue(cs.advance());<a 
name="line.6665"></a>
-<span class="sourceLineNo">6666</span>      Cell c = cs.current();<a 
name="line.6666"></a>
-<span class="sourceLineNo">6667</span>      assertTrue(CellUtil.isPut(c));<a 
name="line.6667"></a>
-<span class="sourceLineNo">6668</span>      
assertFalse(CellUtil.isDelete(c));<a name="line.6668"></a>
-<span class="sourceLineNo">6669</span>      assertFalse(cs.advance());<a 
name="line.6669"></a>
-<span class="sourceLineNo">6670</span>      assertNull(scanner.next());<a 
name="line.6670"></a>
-<span class="sourceLineNo">6671</span>    }<a name="line.6671"></a>
-<span class="sourceLineNo">6672</span><a name="line.6672"></a>
-<span class="sourceLineNo">6673</span>    Delete d = new Delete(row);<a 
name="line.6673"></a>
-<span class="sourceLineNo">6674</span>    d.addColumn(FAMILY, QUALIFIER);<a 
name="line.6674"></a>
-<span class="sourceLineNo">6675</span>    table.delete(d);<a 
name="line.6675"></a>
-<span class="sourceLineNo">6676</span><a name="line.6676"></a>
-<span class="sourceLineNo">6677</span>    Scan scan = new Scan();<a 
name="line.6677"></a>
-<span class="sourceLineNo">6678</span>    scan.setRaw(true);<a 
name="line.6678"></a>
-<span class="sourceLineNo">6679</span>    try (ResultScanner scanner = 
table.getScanner(scan)) {<a name="line.6679"></a>
-<span class="sourceLineNo">6680</span>      Result result = scanner.next();<a 
name="line.6680"></a>
-<span class="sourceLineNo">6681</span>      assertNotNull(result);<a 
name="line.6681"></a>
-<span class="sourceLineNo">6682</span>      CellScanner cs = 
result.cellScanner();<a name="line.6682"></a>
-<span class="sourceLineNo">6683</span>      assertTrue(cs.advance());<a 
name="line.6683"></a>
-<span class="sourceLineNo">6684</span><a name="line.6684"></a>
-<span class="sourceLineNo">6685</span>      // First cell should be the delete 
(masking the Put)<a name="line.6685"></a>
-<span class="sourceLineNo">6686</span>      Cell c = cs.current();<a 
name="line.6686"></a>
-<span class="sourceLineNo">6687</span>      assertTrue("Cell should be a 
Delete: " + c, CellUtil.isDelete(c));<a name="line.6687"></a>
-<span class="sourceLineNo">6688</span>      assertFalse("Cell should not be a 
Put: " + c, CellUtil.isPut(c));<a name="line.6688"></a>
-<span class="sourceLineNo">6689</span><a name="line.6689"></a>
-<span class="sourceLineNo">6690</span>      // Second cell should be the 
original Put<a name="line.6690"></a>
-<span class="sourceLineNo">6691</span>      assertTrue(cs.advance());<a 
name="line.6691"></a>
-<span class="sourceLineNo">6692</span>      c = cs.current();<a 
name="line.6692"></a>
-<span class="sourceLineNo">6693</span>      assertFalse("Cell should not be a 
Delete: " + c, CellUtil.isDelete(c));<a name="line.6693"></a>
-<span class="sourceLineNo">6694</span>      assertTrue("Cell should be a Put: 
" + c, CellUtil.isPut(c));<a name="line.6694"></a>
-<span class="sourceLineNo">6695</span><a name="line.6695"></a>
-<span class="sourceLineNo">6696</span>      // No more cells in this row<a 
name="line.6696"></a>
-<span class="sourceLineNo">6697</span>      assertFalse(cs.advance());<a 
name="line.6697"></a>
-<span class="sourceLineNo">6698</span><a name="line.6698"></a>
-<span class="sourceLineNo">6699</span>      // No more results in this scan<a 
name="line.6699"></a>
-<span class="sourceLineNo">6700</span>      assertNull(scanner.next());<a 
name="line.6700"></a>
-<span class="sourceLineNo">6701</span>    }<a name="line.6701"></a>
-<span class="sourceLineNo">6702</span>  }<a name="line.6702"></a>
-<span class="sourceLineNo">6703</span>}<a name="line.6703"></a>
+<span class="sourceLineNo">6521</span>    Put put = new Put(ROW);<a 
name="line.6521"></a>
+<span class="sourceLineNo">6522</span>    // Put version 1000,2000,3000,4000 
of column FAMILY:QUALIFIER<a name="line.6522"></a>
+<span class="sourceLineNo">6523</span>    for (int t = 0; t &lt; 4; t++) {<a 
name="line.6523"></a>
+<span class="sourceLineNo">6524</span>      put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUES[t]);<a name="line.6524"></a>
+<span class="sourceLineNo">6525</span>    }<a name="line.6525"></a>
+<span class="sourceLineNo">6526</span>    ht.put(put);<a name="line.6526"></a>
+<span class="sourceLineNo">6527</span><a name="line.6527"></a>
+<span class="sourceLineNo">6528</span>    Delete delete = new Delete(ROW);<a 
name="line.6528"></a>
+<span class="sourceLineNo">6529</span>    // Delete latest version of column 
FAMILY:QUALIFIER<a name="line.6529"></a>
+<span class="sourceLineNo">6530</span>    delete.addColumn(FAMILY, 
QUALIFIER);<a name="line.6530"></a>
+<span class="sourceLineNo">6531</span>    ht.delete(delete);<a 
name="line.6531"></a>
+<span class="sourceLineNo">6532</span><a name="line.6532"></a>
+<span class="sourceLineNo">6533</span>    Get get = new Get(ROW);<a 
name="line.6533"></a>
+<span class="sourceLineNo">6534</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6534"></a>
+<span class="sourceLineNo">6535</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6535"></a>
+<span class="sourceLineNo">6536</span>    Result result = ht.get(get);<a 
name="line.6536"></a>
+<span class="sourceLineNo">6537</span>    // verify version 1000,2000,3000 
remains for column FAMILY:QUALIFIER<a name="line.6537"></a>
+<span class="sourceLineNo">6538</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[1], ts[2] }, new byte[][] {<a 
name="line.6538"></a>
+<span class="sourceLineNo">6539</span>        VALUES[0], VALUES[1], VALUES[2] 
}, 0, 2);<a name="line.6539"></a>
+<span class="sourceLineNo">6540</span><a name="line.6540"></a>
+<span class="sourceLineNo">6541</span>    delete = new Delete(ROW);<a 
name="line.6541"></a>
+<span class="sourceLineNo">6542</span>    // Delete two latest version of 
column FAMILY:QUALIFIER<a name="line.6542"></a>
+<span class="sourceLineNo">6543</span>    delete.addColumn(FAMILY, 
QUALIFIER);<a name="line.6543"></a>
+<span class="sourceLineNo">6544</span>    delete.addColumn(FAMILY, 
QUALIFIER);<a name="line.6544"></a>
+<span class="sourceLineNo">6545</span>    ht.delete(delete);<a 
name="line.6545"></a>
+<span class="sourceLineNo">6546</span><a name="line.6546"></a>
+<span class="sourceLineNo">6547</span>    get = new Get(ROW);<a 
name="line.6547"></a>
+<span class="sourceLineNo">6548</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6548"></a>
+<span class="sourceLineNo">6549</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6549"></a>
+<span class="sourceLineNo">6550</span>    result = ht.get(get);<a 
name="line.6550"></a>
+<span class="sourceLineNo">6551</span>    // verify version 1000 remains for 
column FAMILY:QUALIFIER<a name="line.6551"></a>
+<span class="sourceLineNo">6552</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0] }, new byte[][] { VALUES[0] },<a 
name="line.6552"></a>
+<span class="sourceLineNo">6553</span>      0, 0);<a name="line.6553"></a>
+<span class="sourceLineNo">6554</span><a name="line.6554"></a>
+<span class="sourceLineNo">6555</span>    put = new Put(ROW);<a 
name="line.6555"></a>
+<span class="sourceLineNo">6556</span>    // Put a version 5000 of column 
FAMILY:QUALIFIER<a name="line.6556"></a>
+<span class="sourceLineNo">6557</span>    put.addColumn(FAMILY, QUALIFIER, 
ts[4], VALUES[4]);<a name="line.6557"></a>
+<span class="sourceLineNo">6558</span>    ht.put(put);<a name="line.6558"></a>
+<span class="sourceLineNo">6559</span><a name="line.6559"></a>
+<span class="sourceLineNo">6560</span>    get = new Get(ROW);<a 
name="line.6560"></a>
+<span class="sourceLineNo">6561</span>    get.addColumn(FAMILY, QUALIFIER);<a 
name="line.6561"></a>
+<span class="sourceLineNo">6562</span>    
get.setMaxVersions(Integer.MAX_VALUE);<a name="line.6562"></a>
+<span class="sourceLineNo">6563</span>    result = ht.get(get);<a 
name="line.6563"></a>
+<span class="sourceLineNo">6564</span>    // verify version 1000,5000 remains 
for column FAMILY:QUALIFIER<a name="line.6564"></a>
+<span class="sourceLineNo">6565</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[0], ts[4] }, new byte[][] {<a name="line.6565"></a>
+<span class="sourceLineNo">6566</span>        VALUES[0], VALUES[4] }, 0, 1);<a 
name="line.6566"></a>
+<span class="sourceLineNo">6567</span><a name="line.6567"></a>
+<span class="sourceLineNo">6568</span>    ht.close();<a name="line.6568"></a>
+<span class="sourceLineNo">6569</span>    admin.close();<a 
name="line.6569"></a>
+<span class="sourceLineNo">6570</span>  }<a name="line.6570"></a>
+<span class="sourceLineNo">6571</span><a name="line.6571"></a>
+<span class="sourceLineNo">6572</span>  /**<a name="line.6572"></a>
+<span class="sourceLineNo">6573</span>   * Test for HBASE-17125<a 
name="line.6573"></a>
+<span class="sourceLineNo">6574</span>   */<a name="line.6574"></a>
+<span class="sourceLineNo">6575</span>  @Test<a name="line.6575"></a>
+<span class="sourceLineNo">6576</span>  public void testReadWithFilter() 
throws Exception {<a name="line.6576"></a>
+<span class="sourceLineNo">6577</span>    Admin admin = 
TEST_UTIL.getAdmin();<a name="line.6577"></a>
+<span class="sourceLineNo">6578</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6578"></a>
+<span class="sourceLineNo">6579</span>    Table table = 
TEST_UTIL.createTable(tableName, FAMILY, 3);<a name="line.6579"></a>
+<span class="sourceLineNo">6580</span><a name="line.6580"></a>
+<span class="sourceLineNo">6581</span>    byte[] VALUEA = 
Bytes.toBytes("value-a");<a name="line.6581"></a>
+<span class="sourceLineNo">6582</span>    byte[] VALUEB = 
Bytes.toBytes("value-b");<a name="line.6582"></a>
+<span class="sourceLineNo">6583</span>    long[] ts = { 1000, 2000, 3000, 4000 
};<a name="line.6583"></a>
+<span class="sourceLineNo">6584</span><a name="line.6584"></a>
+<span class="sourceLineNo">6585</span>    Put put = new Put(ROW);<a 
name="line.6585"></a>
+<span class="sourceLineNo">6586</span>    // Put version 1000,2000,3000,4000 
of column FAMILY:QUALIFIER<a name="line.6586"></a>
+<span class="sourceLineNo">6587</span>    for (int t = 0; t &lt;= 3; t++) {<a 
name="line.6587"></a>
+<span class="sourceLineNo">6588</span>      if (t &lt;= 1) {<a 
name="line.6588"></a>
+<span class="sourceLineNo">6589</span>        put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUEA);<a name="line.6589"></a>
+<span class="sourceLineNo">6590</span>      } else {<a name="line.6590"></a>
+<span class="sourceLineNo">6591</span>        put.addColumn(FAMILY, QUALIFIER, 
ts[t], VALUEB);<a name="line.6591"></a>
+<span class="sourceLineNo">6592</span>      }<a name="line.6592"></a>
+<span class="sourceLineNo">6593</span>    }<a name="line.6593"></a>
+<span class="sourceLineNo">6594</span>    table.put(put);<a 
name="line.6594"></a>
+<span class="sourceLineNo">6595</span><a name="line.6595"></a>
+<span class="sourceLineNo">6596</span>    Scan scan =<a name="line.6596"></a>
+<span class="sourceLineNo">6597</span>        new Scan().setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6597"></a>
+<span class="sourceLineNo">6598</span>            .setMaxVersions(3);<a 
name="line.6598"></a>
+<span class="sourceLineNo">6599</span>    ResultScanner scanner = 
table.getScanner(scan);<a name="line.6599"></a>
+<span class="sourceLineNo">6600</span>    Result result = scanner.next();<a 
name="line.6600"></a>
+<span class="sourceLineNo">6601</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6601"></a>
+<span class="sourceLineNo">6602</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6602"></a>
+<span class="sourceLineNo">6603</span>      0);<a name="line.6603"></a>
+<span class="sourceLineNo">6604</span><a name="line.6604"></a>
+<span class="sourceLineNo">6605</span>    Get get =<a name="line.6605"></a>
+<span class="sourceLineNo">6606</span>        new Get(ROW)<a 
name="line.6606"></a>
+<span class="sourceLineNo">6607</span>            .setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6607"></a>
+<span class="sourceLineNo">6608</span>            .setMaxVersions(3);<a 
name="line.6608"></a>
+<span class="sourceLineNo">6609</span>    result = table.get(get);<a 
name="line.6609"></a>
+<span class="sourceLineNo">6610</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6610"></a>
+<span class="sourceLineNo">6611</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6611"></a>
+<span class="sourceLineNo">6612</span>      0);<a name="line.6612"></a>
+<span class="sourceLineNo">6613</span><a name="line.6613"></a>
+<span class="sourceLineNo">6614</span>    // Test with max versions 1, it 
should still read ts[1]<a name="line.6614"></a>
+<span class="sourceLineNo">6615</span>    scan =<a name="line.6615"></a>
+<span class="sourceLineNo">6616</span>        new Scan().setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6616"></a>
+<span class="sourceLineNo">6617</span>            .setMaxVersions(1);<a 
name="line.6617"></a>
+<span class="sourceLineNo">6618</span>    scanner = table.getScanner(scan);<a 
name="line.6618"></a>
+<span class="sourceLineNo">6619</span>    result = scanner.next();<a 
name="line.6619"></a>
+<span class="sourceLineNo">6620</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6620"></a>
+<span class="sourceLineNo">6621</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6621"></a>
+<span class="sourceLineNo">6622</span>      0);<a name="line.6622"></a>
+<span class="sourceLineNo">6623</span><a name="line.6623"></a>
+<span class="sourceLineNo">6624</span>    // Test with max versions 1, it 
should still read ts[1]<a name="line.6624"></a>
+<span class="sourceLineNo">6625</span>    get =<a name="line.6625"></a>
+<span class="sourceLineNo">6626</span>        new Get(ROW)<a 
name="line.6626"></a>
+<span class="sourceLineNo">6627</span>            .setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6627"></a>
+<span class="sourceLineNo">6628</span>            .setMaxVersions(1);<a 
name="line.6628"></a>
+<span class="sourceLineNo">6629</span>    result = table.get(get);<a 
name="line.6629"></a>
+<span class="sourceLineNo">6630</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6630"></a>
+<span class="sourceLineNo">6631</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6631"></a>
+<span class="sourceLineNo">6632</span>      0);<a name="line.6632"></a>
+<span class="sourceLineNo">6633</span><a name="line.6633"></a>
+<span class="sourceLineNo">6634</span>    // Test with max versions 5, it 
should still read ts[1]<a name="line.6634"></a>
+<span class="sourceLineNo">6635</span>    scan =<a name="line.6635"></a>
+<span class="sourceLineNo">6636</span>        new Scan().setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6636"></a>
+<span class="sourceLineNo">6637</span>            .setMaxVersions(5);<a 
name="line.6637"></a>
+<span class="sourceLineNo">6638</span>    scanner = table.getScanner(scan);<a 
name="line.6638"></a>
+<span class="sourceLineNo">6639</span>    result = scanner.next();<a 
name="line.6639"></a>
+<span class="sourceLineNo">6640</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6640"></a>
+<span class="sourceLineNo">6641</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6641"></a>
+<span class="sourceLineNo">6642</span>      0);<a name="line.6642"></a>
+<span class="sourceLineNo">6643</span><a name="line.6643"></a>
+<span class="sourceLineNo">6644</span>    // Test with max versions 5, it 
should still read ts[1]<a name="line.6644"></a>
+<span class="sourceLineNo">6645</span>    get =<a name="line.6645"></a>
+<span class="sourceLineNo">6646</span>        new Get(ROW)<a 
name="line.6646"></a>
+<span class="sourceLineNo">6647</span>            .setFilter(new 
ValueFilter(CompareOperator.EQUAL, new SubstringComparator("value-a")))<a 
name="line.6647"></a>
+<span class="sourceLineNo">6648</span>            .setMaxVersions(5);<a 
name="line.6648"></a>
+<span class="sourceLineNo">6649</span>    result = table.get(get);<a 
name="line.6649"></a>
+<span class="sourceLineNo">6650</span>    // ts[0] has gone from user view. 
Only read ts[2] which value is less or equal to 3<a name="line.6650"></a>
+<span class="sourceLineNo">6651</span>    assertNResult(result, ROW, FAMILY, 
QUALIFIER, new long[] { ts[1] }, new byte[][] { VALUEA }, 0,<a 
name="line.6651"></a>
+<span class="sourceLineNo">6652</span>      0);<a name="line.6652"></a>
+<span class="sourceLineNo">6653</span><a name="line.6653"></a>
+<span class="sourceLineNo">6654</span>    table.close();<a 
name="line.6654"></a>
+<span class="sourceLineNo">6655</span>    admin.close();<a 
name="line.6655"></a>
+<span class="sourceLineNo">6656</span>  }<a name="line.6656"></a>
+<span class="sourceLineNo">6657</span><a name="line.6657"></a>
+<span class="sourceLineNo">6658</span>  @Test<a name="line.6658"></a>
+<span class="sourceLineNo">6659</span>  public void testCellUtilTypeMethods() 
throws IOException {<a name="line.6659"></a>
+<span class="sourceLineNo">6660</span>    final TableName tableName = 
TableName.valueOf(name.getMethodName());<a name="line.6660"></a>
+<span class="sourceLineNo">6661</span>    Table table = 
TEST_UTIL.createTable(tableName, FAMILY);<a name="line.6661"></a>
+<span class="sourceLineNo">6662</span><a name="line.6662"></a>
+<span class="sourceLineNo">6663</span>    final byte[] row = 
Bytes.toBytes("p");<a name="line.6663"></a>
+<span class="sourceLineNo">6664</span>    Put p = new Put(row);<a 
name="line.6664"></a>
+<span class="sourceLineNo">6665</span>    p.addColumn(FAMILY, QUALIFIER, 
VALUE);<a name="line.6665"></a>
+<span class="sourceLineNo">6666</span>    table.put(p);<a name="line.6666"></a>
+<span class="sourceLineNo">6667</span><a name="line.6667"></a>
+<span class="sourceLineNo">6668</span>    try (ResultScanner scanner = 
table.getScanner(new Scan())) {<a name="line.6668"></a>
+<span class="sourceLineNo">6669</span>      Result result = scanner.next();<a 
name="line.6669"></a>
+<span class="sourceLineNo">6670</span>      assertNotNull(result);<a 
name="line.6670"></a>
+<span class="sourceLineNo">6671</span>      CellScanner cs = 
result.cellScanner();<a name="line.6671"></a>
+<span class="sourceLineNo">6672</span>      assertTrue(cs.advance());<a 
name="line.6672"></a>
+<span class="sourceLineNo">6673</span>      Cell c = cs.current();<a 
name="line.6673"></a>
+<span class="sourceLineNo">6674</span>      assertTrue(CellUtil.isPut(c));<a 
name="line.6674"></a>
+<span class="sourceLineNo">6675</span>      
assertFalse(CellUtil.isDelete(c));<a name="line.6675"></a>
+<span class="sourceLineNo">6676</span>      assertFalse(cs.advance());<a 
name="line.6676"></a>
+<span class="sourceLineNo">6677</span>      assertNull(scanner.next());<a 
name="line.6677"></a>
+<span class="sourceLineNo">6678</span>    }<a name="line.6678"></a>
+<span class="sourceLineNo">6679</span><a name="line.6679"></a>
+<span class="sourceLineNo">6680</span>    Delete d = new Delete(row);<a 
name="line.6680"></a>
+<span class="sourceLineNo">6681</span>    d.addColumn(FAMILY, QUALIFIER);<a 
name="line.6681"></a>
+<span class="sourceLineNo">6682</span>    table.delete(d);<a 
name="line.6682"></a>
+<span class="sourceLineNo">6683</span><a name="line.6683"></a>
+<span class="sourceLineNo">6684</span>    Scan scan = new Scan();<a 
name="line.6684"></a>
+<span class="sourceLineNo">6685</span>    scan.setRaw(true);<a 
name="line.6685"></a>
+<span class="sourceLineNo">6686</span>    try (ResultScanner scanner = 
table.getScanner(scan)) {<a name="line.6686"></a>
+<span class="sourceLineNo">6687</span>      Result result = scanner.next();<a 
name="line.6687"></a>
+<span class="sourceLineNo">6688</span>      assertNotNull(result);<a 
name="line.6688"></a>
+<span class="sourceLineNo">6689</span>      CellScanner cs = 
result.cellScanner();<a name="line.6689"></a>
+<span class="sourceLineNo">6690</span>      assertTrue(cs.advance());<a 
name="line.6690"></a>
+<span class="sourceLineNo">6691</span><a name="line.6691"></a>
+<span class="sourceLineNo">6692</span>      // First cell should be the delete 
(masking the Put)<a name="line.6692"></a>
+<span class="sourceLineNo">6693</span>      Cell c = cs.current();<a 
name="line.6693"></a>
+<span class="sourceLineNo">6694</span>      assertTrue("Cell should be a 
Delete: " + c, CellUtil.isDelete(c));<a name="line.6694"></a>
+<span class="sourceLineNo">6695</span>      assertFalse("Cell should not be a 
Put: " + c, CellUtil.isPut(c));<a name="line.6695"></a>
+<span class="sourceLineNo">6696</span><a name="line.6696"></a>
+<span class="sourceLineNo">6697</span>      // Second cell should be the 
original Put<a name="line.6697"></a>
+<span class="sourceLineNo">6698</span>      assertTrue(cs.advance());<a 
name="line.6698"></a>
+<span class="sourceLineNo">6699</span>      c = cs.current();<a 
name="line.6699"></a>
+<span class="sourceLineNo">6700</span>      assertFalse("Cell should not be a 
Delete: " + c, CellUtil.isDelete(c));<a name="line.6700"></a>
+<span class="sourceLineNo">6701</span>      assertTrue("Cell should be a Put: 
" + c, CellUtil.isPut(c));<a name="line.6701"></a>
+<span class="sourceLineNo">6702</span><a name="line.6702"></a>
+<span class="sourceLineNo">6703</span>      // No more cells in this row<a 
name="line.6703"></a>
+<span class="sourceLineNo">6704</span>      assertFalse(cs.advance());<a 
name="line.6704"></a>
+<span class="sourceLineNo">6705</span><a name="line.6705"></a>
+<span class="sourceLineNo">6706</span>      // No more results in this scan<a 
name="line.6706"></a>
+<span class="sourceLineNo">6707</span>      assertNull(scanner.next());<a 
name="line.6707"></a>
+<span class="sourceLineNo">6708</span>    }<a name="line.6708"></a>
+<span class="sourceLineNo">6709</span>  }<a name="line.6709"></a>
+<span class="sourceLineNo">6710</span>}<a name="line.6710"></a>
 
 
 

Reply via email to