Thrift2 should support DeleteFamilyVersion type

Signed-off-by: tedyu <yuzhihong@gmail.com>
This commit is contained in:
huzheng 2017-07-19 18:00:11 +08:00 committed by tedyu
parent e1cd59bbc4
commit c891642a5f
4 changed files with 129 additions and 21 deletions

View File

@ -268,27 +268,40 @@ public class ThriftUtilities {
if (in.isSetColumns()) { if (in.isSetColumns()) {
out = new Delete(in.getRow()); out = new Delete(in.getRow());
for (TColumn column : in.getColumns()) { for (TColumn column : in.getColumns()) {
if (column.isSetQualifier()) { if (in.isSetDeleteType()) {
if (column.isSetTimestamp()) { switch (in.getDeleteType()) {
if (in.isSetDeleteType() && case DELETE_COLUMN:
in.getDeleteType().equals(TDeleteType.DELETE_COLUMNS)) if (column.isSetTimestamp()) {
out.addColumns(column.getFamily(), column.getQualifier(), column.getTimestamp());
else
out.addColumn(column.getFamily(), column.getQualifier(), column.getTimestamp()); out.addColumn(column.getFamily(), column.getQualifier(), column.getTimestamp());
} else { } else {
if (in.isSetDeleteType() &&
in.getDeleteType().equals(TDeleteType.DELETE_COLUMNS))
out.addColumns(column.getFamily(), column.getQualifier());
else
out.addColumn(column.getFamily(), column.getQualifier()); out.addColumn(column.getFamily(), column.getQualifier());
}
break;
case DELETE_COLUMNS:
if (column.isSetTimestamp()) {
out.addColumns(column.getFamily(), column.getQualifier(), column.getTimestamp());
} else {
out.addColumns(column.getFamily(), column.getQualifier());
}
break;
case DELETE_FAMILY:
if (column.isSetTimestamp()) {
out.addFamily(column.getFamily(), column.getTimestamp());
} else {
out.addFamily(column.getFamily());
}
break;
case DELETE_FAMILY_VERSION:
if (column.isSetTimestamp()) {
out.addFamilyVersion(column.getFamily(), column.getTimestamp());
} else {
throw new IllegalArgumentException(
"Timestamp is required for TDelete with DeleteFamilyVersion type");
}
break;
} }
} else { } else {
if (column.isSetTimestamp()) { throw new IllegalArgumentException("DeleteType is required for TDelete");
out.addFamily(column.getFamily(), column.getTimestamp());
} else {
out.addFamily(column.getFamily());
}
} }
} }
} else { } else {

View File

@ -18,7 +18,9 @@ import org.apache.thrift.TEnum;
*/ */
public enum TDeleteType implements org.apache.thrift.TEnum { public enum TDeleteType implements org.apache.thrift.TEnum {
DELETE_COLUMN(0), DELETE_COLUMN(0),
DELETE_COLUMNS(1); DELETE_COLUMNS(1),
DELETE_FAMILY(2),
DELETE_FAMILY_VERSION(3);
private final int value; private final int value;
@ -43,6 +45,10 @@ public enum TDeleteType implements org.apache.thrift.TEnum {
return DELETE_COLUMN; return DELETE_COLUMN;
case 1: case 1:
return DELETE_COLUMNS; return DELETE_COLUMNS;
case 2:
return DELETE_FAMILY;
case 3:
return DELETE_FAMILY_VERSION;
default: default:
return null; return null;
} }

View File

@ -75,7 +75,9 @@ struct TResult {
*/ */
enum TDeleteType { enum TDeleteType {
DELETE_COLUMN = 0, DELETE_COLUMN = 0,
DELETE_COLUMNS = 1 DELETE_COLUMNS = 1,
DELETE_FAMILY = 2,
DELETE_FAMILY_VERSION = 3
} }
/** /**

View File

@ -31,8 +31,11 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Increment;
import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Delete;
@ -75,10 +78,8 @@ import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.Rule;
import org.junit.rules.TestName; import org.junit.rules.TestName;
import org.junit.experimental.categories.Category; import org.junit.experimental.categories.Category;
import org.junit.rules.TestName;
import java.io.IOException; import java.io.IOException;
import java.io.InterruptedIOException; import java.io.InterruptedIOException;
@ -440,6 +441,92 @@ public class TestThriftHBaseServiceHandler {
assertEquals(timestamp1, result.getColumnValues().get(0).getTimestamp()); assertEquals(timestamp1, result.getColumnValues().get(0).getTimestamp());
} }
@Test
public void testDeleteFamily() throws Exception {
ThriftHBaseServiceHandler handler = createHandler();
byte[] rowName = "testDeleteFamily".getBytes();
ByteBuffer table = wrap(tableAname);
long timestamp1 = System.currentTimeMillis() - 10;
long timestamp2 = System.currentTimeMillis();
List<TColumnValue> columnValues = new ArrayList<TColumnValue>();
TColumnValue columnValueA =
new TColumnValue(wrap(familyAname), wrap(qualifierAname), wrap(valueAname));
columnValueA.setTimestamp(timestamp1);
columnValues.add(columnValueA);
TPut put = new TPut(wrap(rowName), columnValues);
put.setColumnValues(columnValues);
handler.put(table, put);
columnValueA.setTimestamp(timestamp2);
handler.put(table, put);
TGet get = new TGet(wrap(rowName));
get.setMaxVersions(2);
TResult result = handler.get(table, get);
assertEquals(2, result.getColumnValuesSize());
TDelete delete = new TDelete(wrap(rowName));
List<TColumn> deleteColumns = new ArrayList<TColumn>();
TColumn deleteColumn = new TColumn(wrap(familyAname));
deleteColumns.add(deleteColumn);
delete.setColumns(deleteColumns);
delete.setDeleteType(TDeleteType.DELETE_FAMILY);
handler.deleteSingle(table, delete);
get = new TGet(wrap(rowName));
result = handler.get(table, get);
assertArrayEquals(null, result.getRow());
assertEquals(0, result.getColumnValuesSize());
}
@Test
public void testDeleteFamilyVersion() throws Exception {
ThriftHBaseServiceHandler handler = createHandler();
byte[] rowName = "testDeleteFamilyVersion".getBytes();
ByteBuffer table = wrap(tableAname);
long timestamp1 = System.currentTimeMillis() - 10;
long timestamp2 = System.currentTimeMillis();
List<TColumnValue> columnValues = new ArrayList<TColumnValue>();
TColumnValue columnValueA =
new TColumnValue(wrap(familyAname), wrap(qualifierAname), wrap(valueAname));
columnValueA.setTimestamp(timestamp1);
columnValues.add(columnValueA);
TPut put = new TPut(wrap(rowName), columnValues);
put.setColumnValues(columnValues);
handler.put(table, put);
columnValueA.setTimestamp(timestamp2);
handler.put(table, put);
TGet get = new TGet(wrap(rowName));
get.setMaxVersions(2);
TResult result = handler.get(table, get);
assertEquals(2, result.getColumnValuesSize());
TDelete delete = new TDelete(wrap(rowName));
List<TColumn> deleteColumns = new ArrayList<TColumn>();
TColumn deleteColumn = new TColumn(wrap(familyAname));
deleteColumn.setTimestamp(timestamp1);
deleteColumns.add(deleteColumn);
delete.setColumns(deleteColumns);
delete.setDeleteType(TDeleteType.DELETE_FAMILY_VERSION);
handler.deleteSingle(table, delete);
get = new TGet(wrap(rowName));
result = handler.get(table, get);
assertArrayEquals(rowName, result.getRow());
assertEquals(1, result.getColumnValuesSize());
assertEquals(timestamp2, result.getColumnValues().get(0).getTimestamp());
}
@Test @Test
public void testIncrement() throws Exception { public void testIncrement() throws Exception {
ThriftHBaseServiceHandler handler = createHandler(); ThriftHBaseServiceHandler handler = createHandler();