Thrift2 should support DeleteFamilyVersion type
Signed-off-by: tedyu <yuzhihong@gmail.com>
This commit is contained in:
parent
e1cd59bbc4
commit
c891642a5f
|
@ -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()) {
|
||||||
|
switch (in.getDeleteType()) {
|
||||||
|
case DELETE_COLUMN:
|
||||||
if (column.isSetTimestamp()) {
|
if (column.isSetTimestamp()) {
|
||||||
if (in.isSetDeleteType() &&
|
|
||||||
in.getDeleteType().equals(TDeleteType.DELETE_COLUMNS))
|
|
||||||
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 {
|
} else {
|
||||||
|
out.addColumns(column.getFamily(), column.getQualifier());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DELETE_FAMILY:
|
||||||
if (column.isSetTimestamp()) {
|
if (column.isSetTimestamp()) {
|
||||||
out.addFamily(column.getFamily(), column.getTimestamp());
|
out.addFamily(column.getFamily(), column.getTimestamp());
|
||||||
} else {
|
} else {
|
||||||
out.addFamily(column.getFamily());
|
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 {
|
||||||
|
throw new IllegalArgumentException("DeleteType is required for TDelete");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue