HBASE-1951 Stack overflow when calling HTable.checkAndPut()
when deleting a lot of values git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@832640 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
99e725c7ff
commit
88c5a74d7c
|
@ -90,6 +90,8 @@ Release 0.21.0 - Unreleased
|
||||||
no content changes (Lars Francke via Stack)
|
no content changes (Lars Francke via Stack)
|
||||||
HBASE-1954 Transactional scans do not see newest put (Clint Morgan 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-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
|
IMPROVEMENTS
|
||||||
HBASE-1760 Cleanup TODOs in HTable
|
HBASE-1760 Cleanup TODOs in HTable
|
||||||
|
|
|
@ -102,20 +102,25 @@ public class GetDeleteTracker implements DeleteTracker {
|
||||||
int ret = Bytes.compareTo(buffer, qualifierOffset, qualifierLength,
|
int ret = Bytes.compareTo(buffer, qualifierOffset, qualifierLength,
|
||||||
this.delete.buffer, this.delete.qualifierOffset,
|
this.delete.buffer, this.delete.qualifierOffset,
|
||||||
this.delete.qualifierLength);
|
this.delete.qualifierLength);
|
||||||
if (ret <= -1) {
|
while (ret != 0) {
|
||||||
// Have not reached the next delete yet
|
if (ret <= -1) {
|
||||||
return false;
|
// Have not reached the next delete yet
|
||||||
} 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;
|
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
|
// Check Timestamp
|
||||||
if(timestamp > this.delete.timestamp) {
|
if(timestamp > this.delete.timestamp) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -310,5 +310,20 @@ public class TestGetDeleteTracker extends HBaseTestCase implements HConstants {
|
||||||
|
|
||||||
assertEquals(true, dt.isDeleted(col2, 0, col2Len, ts1));
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue