hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Purtell (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-17096) checkAndMutateApi doesn't work correctly on 0.98.19+
Date Tue, 15 Nov 2016 05:48:58 GMT

    [ 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)

Mime
View raw message