You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/09/26 01:15:10 UTC
svn commit: r819060 - in /hadoop/hbase/trunk/src/contrib/transactional/src:
java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java
test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java
Author: stack
Date: Fri Sep 25 23:15:10 2009
New Revision: 819060
URL: http://svn.apache.org/viewvc?rev=819060&view=rev
Log:
HBASE-1869 IndexedTable delete fails when used in conjunction with RowLock()
Modified:
hadoop/hbase/trunk/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java
hadoop/hbase/trunk/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java
Modified: hadoop/hbase/trunk/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java?rev=819060&r1=819059&r2=819060&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java (original)
+++ hadoop/hbase/trunk/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java Fri Sep 25 23:15:10 2009
@@ -244,7 +244,7 @@
}
}
- Result oldRow = super.get(get, null);
+ Result oldRow = super.get(get, lockid);
SortedMap<byte[], byte[]> oldColumnValues = convertToValueMap(oldRow);
@@ -255,7 +255,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/trunk/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java?rev=819060&r1=819059&r2=819060&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java (original)
+++ hadoop/hbase/trunk/src/contrib/transactional/src/test/org/apache/hadoop/hbase/client/tableindexed/TestIndexedTable.java Fri Sep 25 23:15:10 2009
@@ -36,6 +36,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;
@@ -144,6 +145,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);
@@ -220,4 +239,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);
+ }
}