Thrift2 should support DeleteFamilyVersion type Signed-off-by: tedyu <yuzhih...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/c891642a Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/c891642a Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/c891642a Branch: refs/heads/HBASE-18426 Commit: c891642a5f56b67e3e4f2c73e8e262e266786571 Parents: e1cd59b Author: huzheng <open...@gmail.com> Authored: Wed Jul 19 18:00:11 2017 +0800 Committer: tedyu <yuzhih...@gmail.com> Committed: Tue Jul 25 03:09:29 2017 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/thrift2/ThriftUtilities.java | 47 ++++++---- .../hbase/thrift2/generated/TDeleteType.java | 8 +- .../apache/hadoop/hbase/thrift2/hbase.thrift | 4 +- .../thrift2/TestThriftHBaseServiceHandler.java | 91 +++++++++++++++++++- 4 files changed, 129 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/c891642a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java ---------------------------------------------------------------------- diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java index 3807bec..f318f8e 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java @@ -268,27 +268,40 @@ public class ThriftUtilities { if (in.isSetColumns()) { out = new Delete(in.getRow()); for (TColumn column : in.getColumns()) { - if (column.isSetQualifier()) { - if (column.isSetTimestamp()) { - if (in.isSetDeleteType() && - in.getDeleteType().equals(TDeleteType.DELETE_COLUMNS)) - out.addColumns(column.getFamily(), column.getQualifier(), column.getTimestamp()); - else + if (in.isSetDeleteType()) { + switch (in.getDeleteType()) { + case DELETE_COLUMN: + if (column.isSetTimestamp()) { out.addColumn(column.getFamily(), column.getQualifier(), column.getTimestamp()); - } else { - if (in.isSetDeleteType() && - in.getDeleteType().equals(TDeleteType.DELETE_COLUMNS)) - out.addColumns(column.getFamily(), column.getQualifier()); - else + } else { 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 { - if (column.isSetTimestamp()) { - out.addFamily(column.getFamily(), column.getTimestamp()); - } else { - out.addFamily(column.getFamily()); - } + throw new IllegalArgumentException("DeleteType is required for TDelete"); } } } else { http://git-wip-us.apache.org/repos/asf/hbase/blob/c891642a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java ---------------------------------------------------------------------- diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java index 5d47508..8c9aa39 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java @@ -18,7 +18,9 @@ import org.apache.thrift.TEnum; */ public enum TDeleteType implements org.apache.thrift.TEnum { DELETE_COLUMN(0), - DELETE_COLUMNS(1); + DELETE_COLUMNS(1), + DELETE_FAMILY(2), + DELETE_FAMILY_VERSION(3); private final int value; @@ -43,6 +45,10 @@ public enum TDeleteType implements org.apache.thrift.TEnum { return DELETE_COLUMN; case 1: return DELETE_COLUMNS; + case 2: + return DELETE_FAMILY; + case 3: + return DELETE_FAMILY_VERSION; default: return null; } http://git-wip-us.apache.org/repos/asf/hbase/blob/c891642a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift ---------------------------------------------------------------------- diff --git a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift index e2e5b29..8c5ef59 100644 --- a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift +++ b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift @@ -75,7 +75,9 @@ struct TResult { */ enum TDeleteType { DELETE_COLUMN = 0, - DELETE_COLUMNS = 1 + DELETE_COLUMNS = 1, + DELETE_FAMILY = 2, + DELETE_FAMILY_VERSION = 3 } /** http://git-wip-us.apache.org/repos/asf/hbase/blob/c891642a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java ---------------------------------------------------------------------- diff --git a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java index 3f5c388..7a35d29 100644 --- a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java +++ b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java @@ -31,8 +31,11 @@ import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; 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.Put; +import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Delete; @@ -75,10 +78,8 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; -import org.junit.Rule; import org.junit.rules.TestName; import org.junit.experimental.categories.Category; -import org.junit.rules.TestName; import java.io.IOException; import java.io.InterruptedIOException; @@ -441,6 +442,92 @@ public class TestThriftHBaseServiceHandler { } @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 public void testIncrement() throws Exception { ThriftHBaseServiceHandler handler = createHandler(); byte[] rowName = "testIncrement".getBytes();