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;
+  }
 }