You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jm...@apache.org on 2014/04/25 23:22:56 UTC
svn commit: r1590152 [1/3] - in /hbase/trunk/hbase-thrift/src:
main/java/org/apache/hadoop/hbase/thrift/
main/java/org/apache/hadoop/hbase/thrift/generated/
main/resources/org/apache/hadoop/hbase/thrift/
test/java/org/apache/hadoop/hbase/thrift/
Author: jmhsieh
Date: Fri Apr 25 21:22:55 2014
New Revision: 1590152
URL: http://svn.apache.org/r1590152
Log:
HBASE-10960 Enhance HBase Thrift 1 to include "append" and "checkAndPut" operations (Srikanth Srungarapu)
Modified:
hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftUtilities.java
hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/generated/Hbase.java
hbase/trunk/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
hbase/trunk/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/TestThriftServer.java
Modified: hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java?rev=1590152&r1=1590151&r2=1590152&view=diff
==============================================================================
--- hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java (original)
+++ hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java Fri Apr 25 21:22:55 2014
@@ -54,6 +54,7 @@ import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.TableNotFoundException;
+import org.apache.hadoop.hbase.client.Append;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.Get;
@@ -77,6 +78,7 @@ import org.apache.hadoop.hbase.thrift.ge
import org.apache.hadoop.hbase.thrift.generated.IOError;
import org.apache.hadoop.hbase.thrift.generated.IllegalArgument;
import org.apache.hadoop.hbase.thrift.generated.Mutation;
+import org.apache.hadoop.hbase.thrift.generated.TAppend;
import org.apache.hadoop.hbase.thrift.generated.TCell;
import org.apache.hadoop.hbase.thrift.generated.TIncrement;
import org.apache.hadoop.hbase.thrift.generated.TRegionInfo;
@@ -1486,6 +1488,58 @@ public class ThriftServerRunner implemen
increment(tinc);
}
}
+
+ @Override
+ public List<TCell> append(TAppend tappend) throws IOError, TException {
+ if (tappend.getRow().length == 0 || tappend.getTable().length == 0) {
+ throw new TException("Must supply a table and a row key; can't append");
+ }
+
+ try {
+ HTable table = getTable(tappend.getTable());
+ Append append = ThriftUtilities.appendFromThrift(tappend);
+ Result result = table.append(append);
+ return ThriftUtilities.cellFromHBase(result.rawCells());
+ } catch (IOException e) {
+ LOG.warn(e.getMessage(), e);
+ throw new IOError(e.getMessage());
+ }
+ }
+
+ @Override
+ public boolean checkAndPut(ByteBuffer tableName, ByteBuffer row, ByteBuffer column,
+ ByteBuffer value, Mutation mput, Map<ByteBuffer, ByteBuffer> attributes) throws IOError,
+ IllegalArgument, TException {
+ Put put;
+ try {
+ put = new Put(getBytes(row), HConstants.LATEST_TIMESTAMP);
+ addAttributes(put, attributes);
+
+ byte[][] famAndQf = KeyValue.parseColumn(getBytes(mput.column));
+
+ put.addImmutable(famAndQf[0], famAndQf[1], mput.value != null ? getBytes(mput.value)
+ : HConstants.EMPTY_BYTE_ARRAY);
+
+ put.setDurability(mput.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);
+ } catch (IllegalArgumentException e) {
+ LOG.warn(e.getMessage(), e);
+ throw new IllegalArgument(e.getMessage());
+ }
+
+ HTable table = null;
+ try {
+ table = getTable(tableName);
+ byte[][] famAndQf = KeyValue.parseColumn(getBytes(column));
+ return table.checkAndPut(getBytes(row), famAndQf[0], famAndQf[1],
+ value != null ? getBytes(value) : HConstants.EMPTY_BYTE_ARRAY, put);
+ } catch (IOException e) {
+ LOG.warn(e.getMessage(), e);
+ throw new IOError(e.getMessage());
+ } catch (IllegalArgumentException e) {
+ LOG.warn(e.getMessage(), e);
+ throw new IllegalArgument(e.getMessage());
+ }
+ }
}
Modified: hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftUtilities.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftUtilities.java?rev=1590152&r1=1590151&r2=1590152&view=diff
==============================================================================
--- hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftUtilities.java (original)
+++ hbase/trunk/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftUtilities.java Fri Apr 25 21:22:55 2014
@@ -18,6 +18,8 @@
package org.apache.hadoop.hbase.thrift;
+import static org.apache.hadoop.hbase.util.Bytes.getBytes;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
@@ -28,12 +30,14 @@ import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Append;
import org.apache.hadoop.hbase.client.Increment;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.compress.Compression;
import org.apache.hadoop.hbase.regionserver.BloomType;
import org.apache.hadoop.hbase.thrift.generated.ColumnDescriptor;
import org.apache.hadoop.hbase.thrift.generated.IllegalArgument;
+import org.apache.hadoop.hbase.thrift.generated.TAppend;
import org.apache.hadoop.hbase.thrift.generated.TCell;
import org.apache.hadoop.hbase.thrift.generated.TColumn;
import org.apache.hadoop.hbase.thrift.generated.TIncrement;
@@ -202,4 +206,28 @@ public class ThriftUtilities {
inc.addColumn(famAndQf[0], famAndQf[1], tincrement.getAmmount());
return inc;
}
+
+ /**
+ * From a {@link TAppend} create an {@link Append}.
+ * @param tappend the Thrift version of an append.
+ * @return an increment that the {@link TAppend} represented.
+ */
+ public static Append appendFromThrift(TAppend tappend) {
+ Append append = new Append(tappend.getRow());
+ List<ByteBuffer> columns = tappend.getColumns();
+ List<ByteBuffer> values = tappend.getValues();
+
+ if (columns.size() != values.size()) {
+ throw new IllegalArgumentException(
+ "Sizes of columns and values in tappend object are not matching");
+ }
+
+ int length = columns.size();
+
+ for (int i = 0; i < length; i++) {
+ byte[][] famAndQf = KeyValue.parseColumn(getBytes(columns.get(i)));
+ append.add(famAndQf[0], famAndQf[1], getBytes(values.get(i)));
+ }
+ return append;
+ }
}