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


Reply via email to