You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2014/04/25 11:43:06 UTC
svn commit: r1589963 - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/regionserver/
test/java/org/apache/hadoop/hbase/regionserver/
Author: ramkrishna
Date: Fri Apr 25 09:43:05 2014
New Revision: 1589963
URL: http://svn.apache.org/r1589963
Log:
HBASE-11053- Change DeleteTracker APIs to work with Cell (Ram)
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DeleteTracker.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScanDeleteTracker.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DeleteTracker.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DeleteTracker.java?rev=1589963&r1=1589962&r2=1589963&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DeleteTracker.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DeleteTracker.java Fri Apr 25 09:43:05 2014
@@ -19,6 +19,7 @@
package org.apache.hadoop.hbase.regionserver;
import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.Cell;
/**
* This interface is used for the tracking and enforcement of Deletes
@@ -33,32 +34,21 @@ import org.apache.hadoop.classification.
public interface DeleteTracker {
/**
- * Add the specified KeyValue to the list of deletes to check against for
+ * Add the specified cell to the list of deletes to check against for
* this row operation.
* <p>
* This is called when a Delete is encountered in a StoreFile.
- * @param buffer KeyValue buffer
- * @param qualifierOffset column qualifier offset
- * @param qualifierLength column qualifier length
- * @param timestamp timestamp
- * @param type delete type as byte
- */
- void add(
- byte[] buffer, int qualifierOffset, int qualifierLength, long timestamp, byte type
- );
+ * @param Cell cell
+ */
+ void add(Cell cell);
/**
- * Check if the specified KeyValue buffer has been deleted by a previously
+ * Check if the specified cell buffer has been deleted by a previously
* seen delete.
- * @param buffer KeyValue buffer
- * @param qualifierOffset column qualifier offset
- * @param qualifierLength column qualifier length
- * @param timestamp timestamp
+ * @param Cell cell to check if deleted
* @return deleteResult The result tells whether the KeyValue is deleted and why
*/
- DeleteResult isDeleted(
- byte[] buffer, int qualifierOffset, int qualifierLength, long timestamp
- );
+ DeleteResult isDeleted(Cell cell);
/**
* @return true if there are no current delete, false otherwise
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.java?rev=1589963&r1=1589962&r2=1589963&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.java Fri Apr 25 09:43:05 2014
@@ -23,6 +23,7 @@ import java.util.SortedSet;
import java.util.TreeSet;
import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.util.Bytes;
@@ -72,8 +73,11 @@ public class ScanDeleteTracker implement
* @param type delete type as byte
*/
@Override
- public void add(byte[] buffer, int qualifierOffset, int qualifierLength,
- long timestamp, byte type) {
+ public void add(Cell cell) {
+ long timestamp = cell.getTimestamp();
+ int qualifierOffset = cell.getQualifierOffset();
+ int qualifierLength = cell.getQualifierLength();
+ byte type = cell.getTypeByte();
if (!hasFamilyStamp || timestamp > familyStamp) {
if (type == KeyValue.Type.DeleteFamily.getCode()) {
hasFamilyStamp = true;
@@ -87,12 +91,12 @@ public class ScanDeleteTracker implement
if (deleteBuffer != null && type < deleteType) {
// same column, so ignore less specific delete
if (Bytes.equals(deleteBuffer, deleteOffset, deleteLength,
- buffer, qualifierOffset, qualifierLength)){
+ cell.getQualifierArray(), qualifierOffset, qualifierLength)){
return;
}
}
// new column, or more general delete type
- deleteBuffer = buffer;
+ deleteBuffer = cell.getQualifierArray();
deleteOffset = qualifierOffset;
deleteLength = qualifierLength;
deleteType = type;
@@ -105,15 +109,14 @@ public class ScanDeleteTracker implement
* Check if the specified KeyValue buffer has been deleted by a previously
* seen delete.
*
- * @param buffer KeyValue buffer
- * @param qualifierOffset column qualifier offset
- * @param qualifierLength column qualifier length
- * @param timestamp timestamp
+ * @param Cell cell
* @return deleteResult
*/
@Override
- public DeleteResult isDeleted(byte [] buffer, int qualifierOffset,
- int qualifierLength, long timestamp) {
+ public DeleteResult isDeleted(Cell cell) {
+ long timestamp = cell.getTimestamp();
+ int qualifierOffset = cell.getQualifierOffset();
+ int qualifierLength = cell.getQualifierLength();
if (hasFamilyStamp && timestamp <= familyStamp) {
return DeleteResult.FAMILY_DELETED;
}
@@ -124,7 +127,7 @@ public class ScanDeleteTracker implement
if (deleteBuffer != null) {
int ret = Bytes.compareTo(deleteBuffer, deleteOffset, deleteLength,
- buffer, qualifierOffset, qualifierLength);
+ cell.getQualifierArray(), qualifierOffset, qualifierLength);
if (ret == 0) {
if (deleteType == KeyValue.Type.DeleteColumn.getCode()) {
@@ -147,7 +150,7 @@ public class ScanDeleteTracker implement
throw new IllegalStateException("isDelete failed: deleteBuffer="
+ Bytes.toStringBinary(deleteBuffer, deleteOffset, deleteLength)
+ ", qualifier="
- + Bytes.toStringBinary(buffer, qualifierOffset, qualifierLength)
+ + Bytes.toStringBinary(cell.getQualifierArray(), qualifierOffset, qualifierLength)
+ ", timestamp=" + timestamp + ", comparison result: " + ret);
}
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java?rev=1589963&r1=1589962&r2=1589963&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java Fri Apr 25 09:43:05 2014
@@ -315,8 +315,7 @@ public class ScanQueryMatcher {
tr.withinOrAfterTimeRange(timestamp);
if (includeDeleteMarker
&& mvccVersion <= maxReadPointToTrackVersions) {
- this.deletes.add(cell.getQualifierArray(), qualifierOffset,
- qualifierLength, timestamp, typeByte);
+ this.deletes.add(cell);
}
// Can't early out now, because DelFam come before any other keys
}
@@ -349,8 +348,7 @@ public class ScanQueryMatcher {
// note the following next else if...
// delete marker are not subject to other delete markers
} else if (!this.deletes.isEmpty()) {
- DeleteResult deleteResult = deletes.isDeleted(cell.getQualifierArray(),
- qualifierOffset, qualifierLength, timestamp);
+ DeleteResult deleteResult = deletes.isDeleted(cell);
switch (deleteResult) {
case FAMILY_DELETED:
case COLUMN_DELETED:
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScanDeleteTracker.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScanDeleteTracker.java?rev=1589963&r1=1589962&r2=1589963&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScanDeleteTracker.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScanDeleteTracker.java Fri Apr 25 09:43:05 2014
@@ -19,7 +19,9 @@
package org.apache.hadoop.hbase.regionserver;
-import org.apache.hadoop.hbase.*;
+import org.apache.hadoop.hbase.HBaseTestCase;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.SmallTests;
import org.apache.hadoop.hbase.regionserver.DeleteTracker.DeleteResult;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.experimental.categories.Category;
@@ -38,32 +40,32 @@ public class TestScanDeleteTracker exten
}
public void testDeletedBy_Delete() {
- byte [] qualifier = Bytes.toBytes("qualifier");
- deleteType = KeyValue.Type.Delete.getCode();
-
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
- DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ Bytes.toBytes("qualifier"), timestamp, KeyValue.Type.Delete);
+ sdt.add(kv);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.VERSION_DELETED, ret);
}
public void testDeletedBy_DeleteColumn() {
- byte [] qualifier = Bytes.toBytes("qualifier");
- deleteType = KeyValue.Type.DeleteColumn.getCode();
-
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ Bytes.toBytes("qualifier"), timestamp, KeyValue.Type.DeleteColumn);
+ sdt.add(kv);
timestamp -= 5;
- DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ Bytes.toBytes("qualifier"), timestamp , KeyValue.Type.DeleteColumn);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.COLUMN_DELETED, ret);
}
public void testDeletedBy_DeleteFamily() {
- byte [] qualifier = Bytes.toBytes("qualifier");
- deleteType = KeyValue.Type.DeleteFamily.getCode();
-
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
-
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ Bytes.toBytes("qualifier"), timestamp, KeyValue.Type.DeleteFamily);
+ sdt.add(kv);
timestamp -= 5;
- DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ Bytes.toBytes("qualifier"), timestamp , KeyValue.Type.DeleteColumn);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.FAMILY_DELETED, ret);
}
@@ -73,25 +75,40 @@ public class TestScanDeleteTracker exten
byte [] qualifier3 = Bytes.toBytes("qualifier3");
byte [] qualifier4 = Bytes.toBytes("qualifier4");
deleteType = KeyValue.Type.DeleteFamilyVersion.getCode();
-
- sdt.add(null, 0, 0, timestamp, deleteType);
-
- DeleteResult ret = sdt.isDeleted(qualifier1, 0, qualifier1.length, timestamp);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ null, timestamp, KeyValue.Type.DeleteFamilyVersion);
+ sdt.add(kv);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier1, timestamp, KeyValue.Type.DeleteFamilyVersion);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
- ret = sdt.isDeleted(qualifier2, 0, qualifier2.length, timestamp);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier2, timestamp, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
- ret = sdt.isDeleted(qualifier3, 0, qualifier3.length, timestamp);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier3, timestamp, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
- ret = sdt.isDeleted(qualifier4, 0, qualifier4.length, timestamp);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier4, timestamp, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.FAMILY_VERSION_DELETED, ret);
-
- ret = sdt.isDeleted(qualifier1, 0, qualifier1.length, timestamp + 3);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier1, timestamp + 3, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.NOT_DELETED, ret);
- ret = sdt.isDeleted(qualifier2, 0, qualifier2.length, timestamp - 2);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier2, timestamp - 2, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.NOT_DELETED, ret);
- ret = sdt.isDeleted(qualifier3, 0, qualifier3.length, timestamp - 5);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier3, timestamp - 5, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.NOT_DELETED, ret);
- ret = sdt.isDeleted(qualifier4, 0, qualifier4.length, timestamp + 8);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier4, timestamp + 8, KeyValue.Type.DeleteFamilyVersion);
+ ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.NOT_DELETED, ret);
}
@@ -99,15 +116,20 @@ public class TestScanDeleteTracker exten
public void testDelete_DeleteColumn() {
byte [] qualifier = Bytes.toBytes("qualifier");
deleteType = KeyValue.Type.Delete.getCode();
-
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, timestamp, KeyValue.Type.Delete);
+ sdt.add(kv);
timestamp -= 5;
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, timestamp, KeyValue.Type.DeleteColumn);
deleteType = KeyValue.Type.DeleteColumn.getCode();
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
+ sdt.add(kv);
timestamp -= 5;
- DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, timestamp, KeyValue.Type.DeleteColumn);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.COLUMN_DELETED, ret);
}
@@ -115,14 +137,17 @@ public class TestScanDeleteTracker exten
public void testDeleteColumn_Delete() {
byte [] qualifier = Bytes.toBytes("qualifier");
deleteType = KeyValue.Type.DeleteColumn.getCode();
-
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, timestamp, KeyValue.Type.DeleteColumn);
+ sdt.add(kv);
qualifier = Bytes.toBytes("qualifier1");
deleteType = KeyValue.Type.Delete.getCode();
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, timestamp, KeyValue.Type.Delete);
+ sdt.add(kv);
- DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals( DeleteResult.VERSION_DELETED, ret);
}
@@ -132,9 +157,10 @@ public class TestScanDeleteTracker exten
public void testDelete_KeepDelete(){
byte [] qualifier = Bytes.toBytes("qualifier");
deleteType = KeyValue.Type.Delete.getCode();
-
- sdt.add(qualifier, 0, qualifier.length, timestamp, deleteType);
- sdt.isDeleted(qualifier, 0, qualifier.length, timestamp);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, timestamp, KeyValue.Type.Delete);
+ sdt.add(kv);
+ sdt.isDeleted(kv);
assertEquals(false ,sdt.isEmpty());
}
@@ -146,8 +172,12 @@ public class TestScanDeleteTracker exten
long valueTimestamp = 0;
sdt.reset();
- sdt.add(qualifier, 0, qualifier.length, deleteTimestamp, deleteType);
- DeleteResult ret = sdt.isDeleted(qualifier, 0, qualifier.length, valueTimestamp);
+ KeyValue kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, deleteTimestamp, KeyValue.Type.Delete);
+ sdt.add(kv);
+ kv = new KeyValue(Bytes.toBytes("row"), Bytes.toBytes("f"),
+ qualifier, valueTimestamp, KeyValue.Type.Delete);
+ DeleteResult ret = sdt.isDeleted(kv);
assertEquals(DeleteResult.NOT_DELETED, ret);
}