[ 
https://issues.apache.org/jira/browse/HBASE-17096?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15666193#comment-15666193
 ] 

Andrew Purtell commented on HBASE-17096:
----------------------------------------

My first attempt at a reproduction using a new unit in HRegion tests did not 
reproduce the behavior.
{code}
  @Test
  public void testCheckAndMutate_HBASE17096() throws IOException {
        byte[] row = Bytes.toBytes("ROW");
        byte[] qualifier = Bytes.toBytes("QUALIFIER");
        byte[] oldValue = null;
        byte[] newValue = Bytes.toBytes("VALUE");
    // Setting up region
    String method = this.getName();
    this.region = initHRegion(tableName, method, CONF, fam1);
    try {
      Put put = new Put(row);
      put.add(fam1, qualifier, newValue);
      assertTrue(region.checkAndMutate(row, fam1, qualifier, CompareOp.EQUAL,
        new BinaryComparator(oldValue), put, true));
      Delete delete = new Delete(row);
      assertTrue(region.checkAndMutate(row, fam1, qualifier, CompareOp.EQUAL,
        new BinaryComparator(newValue), delete, true));
      assertFalse(region.checkAndMutate(row, fam1, qualifier, CompareOp.EQUAL,
        new BinaryComparator(newValue), delete, true));
    } finally {
      HRegion.closeHRegion(this.region);
      this.region = null;
    }
  }
{code}
This bypasses the client side, RPC processing, and does not specify a TTL in 
the schema. I'll try again now with a closer approximation as a new unit for 
client side tests. 

> checkAndMutateApi doesn't work correctly on 0.98.19+
> ----------------------------------------------------
>
>                 Key: HBASE-17096
>                 URL: https://issues.apache.org/jira/browse/HBASE-17096
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Samarth Jain
>
> Below is the test case. It uses some Phoenix APIs for getting hold of admin 
> and HConnection but should be easily adopted for an HBase IT test. The second 
> checkAndMutate should return false but it is returning true. This test fails 
> with HBase-0.98.23 and works fine with HBase-0.98.17
> {code}
> @Test
>     public void testCheckAndMutateApi() throws Exception {
>         byte[] row = Bytes.toBytes("ROW");
>         byte[] tableNameBytes = Bytes.toBytes(generateUniqueName());
>         byte[] family = Bytes.toBytes(generateUniqueName());
>         byte[] qualifier = Bytes.toBytes("QUALIFIER");
>         byte[] oldValue = null;
>         byte[] newValue = Bytes.toBytes("VALUE");
>         Put put = new Put(row);
>         put.add(family, qualifier, newValue);
>         try (Connection conn = DriverManager.getConnection(getUrl())) {
>             PhoenixConnection phxConn = conn.unwrap(PhoenixConnection.class);
>             try (HBaseAdmin admin = phxConn.getQueryServices().getAdmin()) {
>                 HTableDescriptor tableDesc = new HTableDescriptor(
>                         TableName.valueOf(tableNameBytes));
>                 HColumnDescriptor columnDesc = new HColumnDescriptor(family);
>                 columnDesc.setTimeToLive(120);
>                 tableDesc.addFamily(columnDesc);
>                 admin.createTable(tableDesc);
>                 HTableInterface tableDescriptor = 
> admin.getConnection().getTable(tableNameBytes);
>                 assertTrue(tableDescriptor.checkAndPut(row, family, 
> qualifier, oldValue, put));
>                 Delete delete = new Delete(row);
>                 RowMutations mutations = new RowMutations(row);
>                 mutations.add(delete);
>                 assertTrue(tableDescriptor.checkAndMutate(row, family, 
> qualifier, CompareOp.EQUAL, newValue, mutations));
>                 assertFalse(tableDescriptor.checkAndMutate(row, family, 
> qualifier, CompareOp.EQUAL, newValue, mutations));
>             }
>         }
>     }
> {code}
> FYI, [~apurtell], [~jamestaylor], [~lhofhansl]. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to