Author: stack Date: Sat Sep 26 21:51:54 2009 New Revision: 819224 URL: http://svn.apache.org/viewvc?rev=819224&view=rev Log: HBASE-1869 IndexedTable delete fails when used in conjunction with RowLock()
Modified: hadoop/hbase/branches/0.20/CHANGES.txt hadoop/hbase/branches/0.20/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java hadoop/hbase/branches/0.20/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java Modified: hadoop/hbase/branches/0.20/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/CHANGES.txt?rev=819224&r1=819223&r2=819224&view=diff ============================================================================== --- hadoop/hbase/branches/0.20/CHANGES.txt (original) +++ hadoop/hbase/branches/0.20/CHANGES.txt Sat Sep 26 21:51:54 2009 @@ -35,6 +35,8 @@ HBASE-1858 Master can't split logs created by THBase (Clint Morgan via Stack) HBASE-1871 Wrong type used in TableMapReduceUtil.initTableReduceJob() (Lars George via Stack) + HBASE-1869 IndexedTable delete fails when used in conjunction with RowLock() + (Keith Thomas via Stack) IMPROVEMENTS HBASE-1819 Update to 0.20.1 hadoop and zk 3.2.1 Modified: hadoop/hbase/branches/0.20/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java?rev=819224&r1=819223&r2=819224&view=diff ============================================================================== --- hadoop/hbase/branches/0.20/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java (original) +++ hadoop/hbase/branches/0.20/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java Sat Sep 26 21:51:54 2009 @@ -230,7 +230,7 @@ get.addColumn(col); } - Result oldRow = super.get(get, null); + Result oldRow = super.get(get, lockid); SortedMap<byte[], byte[]> oldColumnValues = convertToValueMap(oldRow); @@ -241,7 +241,7 @@ // Handle if there is still a version visible. if (delete.getTimeStamp() != HConstants.LATEST_TIMESTAMP) { get.setTimeRange(1, delete.getTimeStamp()); - oldRow = super.get(get, null); + oldRow = super.get(get, lockid); SortedMap<byte[], byte[]> currentColumnValues = convertToValueMap(oldRow); for (IndexSpecification indexSpec : getIndexes()) { Modified: hadoop/hbase/branches/0.20/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java?rev=819224&r1=819223&r2=819224&view=diff ============================================================================== --- hadoop/hbase/branches/0.20/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java (original) +++ hadoop/hbase/branches/0.20/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java Sat Sep 26 21:51:54 2009 @@ -35,6 +35,7 @@ import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.RowLock; +import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.regionserver.tableindexed.IndexedRegionServer; import org.apache.hadoop.hbase.util.Bytes; @@ -143,6 +144,24 @@ Bytes.toString(persistedRowValue)); } + private void assertRowDeleted(int numRowsExpected) + throws IndexNotFoundException, IOException { + // Check the size of the primary table + ResultScanner scanner = table.getScanner(new Scan()); + int numRows = 0; + for (Result rowResult : scanner) { + byte[] colA = rowResult.getValue(FAMILY, QUAL_A); + LOG.info("primary scan : row [" + Bytes.toString(rowResult.getRow()) + + "] value [" + Bytes.toString(colA) + "]"); + numRows++; + } + scanner.close(); + Assert.assertEquals(numRowsExpected, numRows); + + // Check the size of the index tables + assertRowsInOrder(numRowsExpected); + } + private void updateRow(int row, int newValue) throws IOException { Put update = new Put(PerformanceEvaluation.format(row)); byte[] valueA = PerformanceEvaluation.format(newValue); @@ -219,4 +238,15 @@ updateLockedRowNoAutoFlush(row, value); assertRowUpdated(row, value); } + + public void testLockedRowDelete() throws IOException { + writeInitalRows(); + // Delete the first row; + byte[] row = PerformanceEvaluation.format(0); + RowLock lock = table.lockRow(row); + table.delete(new Delete(row, HConstants.LATEST_TIMESTAMP, lock)); + table.unlockRow(lock); + + assertRowDeleted(NUM_ROWS - 1); + } }