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