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);  
+  }
 }