hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Evert Arckens <ev...@outerthought.org>
Subject Re: Update 2 versions of a cell : same issue as HBASE-1485 ?
Date Mon, 06 Sep 2010 10:05:14 GMT
Here's a unittest demonstrating the use case :

public class TwoCellUpdatesTest {
    @Test
    public void testCellUpdates() throws Exception {
        Configuration configuration = HBaseConfiguration.create();
        HBaseTestingUtility hBaseTestingUtility = new
HBaseTestingUtility(configuration);
        hBaseTestingUtility.startMiniCluster(1);

        HBaseAdmin admin = new HBaseAdmin(configuration);
        HTableDescriptor tableDescriptor = new
HTableDescriptor("TestTable");
        byte[] CF = Bytes.toBytes("CF");
        tableDescriptor.addFamily(new HColumnDescriptor(CF,
HConstants.ALL_VERSIONS, "none", false, true, HConstants.FOREVER,
HColumnDescriptor.DEFAULT_BLOOMFILTER));
        admin.createTable(tableDescriptor);
        LocalHTable hTable = new LocalHTable(configuration, "TestTable");

        // Write a column with values at timestamp 1, 2 and 3
        byte[] row = Bytes.toBytes("myRow");
        byte[] qualifier = Bytes.toBytes("myCol");
        Put put = new Put(row);
        put.add(CF, qualifier, 1L, Bytes.toBytes("AAA"));
        hTable.put(put);

        put = new Put(row);
        put.add(CF, qualifier, 2L, Bytes.toBytes("BBB"));
        hTable.put(put);

        put = new Put(row);
        put.add(CF, qualifier, 3L, Bytes.toBytes("EEE"));
        hTable.put(put);

        Get get = new Get(row);
        get.addColumn(CF, qualifier);
        get.setMaxVersions();

        // Check that the column indeed has the right values at timestamps 1
and 2
        Result result = hTable.get(get);
        NavigableMap<Long,byte[]> navigableMap =
result.getMap().get(CF).get(qualifier);
        assertEquals("AAA", Bytes.toString(navigableMap.get(1L)));
        assertEquals("BBB", Bytes.toString(navigableMap.get(2L)));

        // Let major compaction do its work
        admin.flush("TestTable");
        admin.majorCompact("TestTable");
        Thread.sleep(6000);

        // Update the value at timestamp 1
        put = new Put(row);
        put.add(CF, qualifier, 1L, Bytes.toBytes("CCC"));
        hTable.put(put);

// Triggering a major compaction here would make the test succeed
//        admin.flush("TestTable");
//        admin.majorCompact("TestTable");
//        Thread.sleep(6000);

        // Update the value at timestamp 2
        put = new Put(row);
        put.add(CF, qualifier, 2L, Bytes.toBytes("DDD"));
        hTable.put(put);

        // Let major compaction do its work
        admin.flush("TestTable");
        admin.majorCompact("TestTable");
        Thread.sleep(6000);

        // Check that the values at timestamp 2 and 1 got updated
        result = hTable.get(get);
        navigableMap = result.getMap().get(CF).get(qualifier);
        assertEquals("DDD", Bytes.toString(navigableMap.get(2L)));
        assertEquals("CCC", Bytes.toString(navigableMap.get(1L)));
    }
}

On Fri, Aug 20, 2010 at 7:46 PM, Jean-Daniel Cryans <jdcryans@apache.org>wrote:

> I think that this is stretching the usage of timestamps... but would
> you be able to write a small unit test that demonstrates it? Also did
> you try it on both 0.20 and 0.89?
>
> Thx,
>
> J-D
>
> On Fri, Aug 20, 2010 at 6:18 AM, Evert Arckens <evert@outerthought.org>
> wrote:
> > Hi,
> >
> > I have a scenario of which I'm not sure if it is just another example of
> > issue HBASE-1485, or if it is another but related issue :
> >
> > Write 3 cells of a column, at timestamp 1, 2 and 3.
> > Then update the cells at timestamp 1 and 2 (more or less at the same
> > moment).
> >
> > Result is that the update of the cell at timestamp 1 gets lost.
> > If I would perform a major compaction between both updates, the update on
> > timestamp 1 wouldn't get lost.
> >
> > The reason I'm not sure if it is exactly the same issue as HBASE-1485 is
> > because that one just talks about updates on 1 cell, not on a combination
> > updates on 2 cells at different timestamps.
> >
> > Regards,
> > Evert Arckens.
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message