You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2009/11/04 02:29:11 UTC

svn commit: r832642 - in /hadoop/hbase/branches/0.20: CHANGES.txt src/java/org/apache/hadoop/hbase/regionserver/GetDeleteTracker.java src/test/org/apache/hadoop/hbase/regionserver/TestGetDeleteTracker.java

Author: jdcryans
Date: Wed Nov  4 01:29:10 2009
New Revision: 832642

URL: http://svn.apache.org/viewvc?rev=832642&view=rev
Log:
HBASE-1951  Stack overflow when calling HTable.checkAndPut() 
               when deleting a lot of values

Modified:
    hadoop/hbase/branches/0.20/CHANGES.txt
    hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/GetDeleteTracker.java
    hadoop/hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestGetDeleteTracker.java

Modified: hadoop/hbase/branches/0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/CHANGES.txt?rev=832642&r1=832641&r2=832642&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/CHANGES.txt (original)
+++ hadoop/hbase/branches/0.20/CHANGES.txt Wed Nov  4 01:29:10 2009
@@ -29,6 +29,8 @@
                no content changes (Lars Francke via Stack)
    HBASE-1954  Transactional scans do not see newest put (Clint Morgan via Stack)
    HBASE-1919  code: HRS.delete seems to ignore exceptions it shouldnt
+   HBASE-1951  Stack overflow when calling HTable.checkAndPut() 
+               when deleting a lot of values
 
   IMPROVEMENTS
    HBASE-1899  Use scanner caching in shell count

Modified: hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/GetDeleteTracker.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/GetDeleteTracker.java?rev=832642&r1=832641&r2=832642&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/GetDeleteTracker.java (original)
+++ hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/GetDeleteTracker.java Wed Nov  4 01:29:10 2009
@@ -102,20 +102,25 @@
     int ret = Bytes.compareTo(buffer, qualifierOffset, qualifierLength,
         this.delete.buffer, this.delete.qualifierOffset, 
         this.delete.qualifierLength);
-    if (ret <= -1) {
-      // Have not reached the next delete yet
-      return false;
-    } else if(ret >= 1) {
-      // Deletes an earlier column, need to move down deletes
-      if(this.iterator.hasNext()) {
-        this.delete = this.iterator.next();
-      } else {
-        this.delete = null;
+    while (ret != 0) {
+      if (ret <= -1) {
+        // Have not reached the next delete yet
         return false;
+      } else if (ret >= 1) {
+        // Deletes an earlier column, need to move down deletes
+        if (this.iterator.hasNext()) {
+          this.delete = this.iterator.next();
+        } else {
+          this.delete = null;
+          return false;
+        }
+        ret = Bytes.compareTo(buffer, qualifierOffset, qualifierLength,
+            this.delete.buffer, this.delete.qualifierOffset,
+            this.delete.qualifierLength);
+
       }
-      return isDeleted(buffer, qualifierOffset, qualifierLength, timestamp);
     }
-
+   
     // Check Timestamp
     if(timestamp > this.delete.timestamp) {
       return false;

Modified: hadoop/hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestGetDeleteTracker.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestGetDeleteTracker.java?rev=832642&r1=832641&r2=832642&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestGetDeleteTracker.java (original)
+++ hadoop/hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestGetDeleteTracker.java Wed Nov  4 01:29:10 2009
@@ -309,5 +309,20 @@
     
     assertEquals(true, dt.isDeleted(col2, 0, col2Len, ts1));
   }
+
+  // HBASE-1951
+  public void testStackOverflow() {
+    List<Delete> dels = new ArrayList<Delete>();
+    Delete adel = new Delete(col1, 0, col1Len, del, 0L);
+    for(long i = 0; i < 9000; i++) {
+      dt.add(adel.buffer, adel.qualifierOffset, adel.qualifierLength,
+          i, adel.type);
+    }
+
+
+    //update()
+    dt.update();
+    assertEquals(false, dt.isDeleted(col2, 0, col2Len, 7000000));
+  }
   
 }