You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by en...@apache.org on 2014/09/02 22:07:30 UTC
git commit: HBASE-11797 Create Table interface to replace
HTableInterface (Carter)
Repository: hbase
Updated Branches:
refs/heads/master 310ac4f71 -> 211c1e8ad
HBASE-11797 Create Table interface to replace HTableInterface (Carter)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/211c1e8a
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/211c1e8a
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/211c1e8a
Branch: refs/heads/master
Commit: 211c1e8ad439f2dfbbd2f07ce099c0f948e06df3
Parents: 310ac4f
Author: Enis Soztutar <en...@apache.org>
Authored: Tue Sep 2 13:07:02 2014 -0700
Committer: Enis Soztutar <en...@apache.org>
Committed: Tue Sep 2 13:07:02 2014 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/client/HTable.java | 23 +-
.../hadoop/hbase/client/HTableInterface.java | 578 +-----------------
.../org/apache/hadoop/hbase/client/Table.java | 601 +++++++++++++++++++
.../hadoop/hbase/client/HTableWrapper.java | 5 +
.../hadoop/hbase/rest/client/RemoteHTable.java | 14 +-
.../apache/hadoop/hbase/thrift2/HTablePool.java | 6 +
6 files changed, 665 insertions(+), 562 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/211c1e8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
index 91702df..8a68c56 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
@@ -22,6 +22,7 @@ import java.io.Closeable;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -1379,9 +1380,9 @@ public class HTable implements HTableInterface, RegionLocator {
* {@inheritDoc}
*/
@Override
- public Boolean[] exists(final List<Get> gets) throws IOException {
- if (gets.isEmpty()) return new Boolean[]{};
- if (gets.size() == 1) return new Boolean[]{exists(gets.get(0))};
+ public boolean[] existsAll(final List<Get> gets) throws IOException {
+ if (gets.isEmpty()) return new boolean[]{};
+ if (gets.size() == 1) return new boolean[]{exists(gets.get(0))};
for (Get g: gets){
g.setCheckExistenceOnly(true);
@@ -1395,7 +1396,7 @@ public class HTable implements HTableInterface, RegionLocator {
}
// translate.
- Boolean[] results = new Boolean[r1.length];
+ boolean[] results = new boolean[r1.length];
int i = 0;
for (Object o : r1) {
// batch ensures if there is a failure we get an exception instead
@@ -1409,6 +1410,20 @@ public class HTable implements HTableInterface, RegionLocator {
* {@inheritDoc}
*/
@Override
+ @Deprecated
+ public Boolean[] exists(final List<Get> gets) throws IOException {
+ boolean[] results = existsAll(gets);
+ Boolean[] objectResults = new Boolean[results.length];
+ for (int i = 0; i < results.length; ++i) {
+ objectResults[i] = results[i];
+ }
+ return objectResults;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void flushCommits() throws InterruptedIOException, RetriesExhaustedWithDetailsException {
// As we can have an operation in progress even if the buffer is empty, we call
// backgroundFlushCommits at least one time.
http://git-wip-us.apache.org/repos/asf/hbase/blob/211c1e8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTableInterface.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTableInterface.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTableInterface.java
index 46b13b1..34f90d5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTableInterface.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTableInterface.java
@@ -18,390 +18,29 @@
*/
package org.apache.hadoop.hbase.client;
-import com.google.protobuf.Descriptors;
-import com.google.protobuf.Message;
-import com.google.protobuf.Service;
-import com.google.protobuf.ServiceException;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.client.coprocessor.Batch;
-import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
-import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;
-
-import java.io.Closeable;
import java.io.IOException;
import java.util.List;
-import java.util.Map;
/**
* Used to communicate with a single HBase table.
* Obtain an instance from an {@link HConnection}.
*
* @since 0.21.0
+ * @deprecated use {@link org.apache.hadoop.hbase.client.Table} instead
*/
-@InterfaceAudience.Public
-@InterfaceStability.Stable
-public interface HTableInterface extends Closeable {
+@Deprecated
+public interface HTableInterface extends Table {
/**
* Gets the name of this table.
*
* @return the table name.
+ * @deprecated Use {@link #getName()} instead
*/
+ @Deprecated
byte[] getTableName();
/**
- * Gets the fully qualified table name instance of this table.
- */
- TableName getName();
-
- /**
- * Returns the {@link Configuration} object used by this instance.
- * <p>
- * The reference returned is not a copy, so any change made to it will
- * affect this instance.
- */
- Configuration getConfiguration();
-
- /**
- * Gets the {@link HTableDescriptor table descriptor} for this table.
- * @throws IOException if a remote or network exception occurs.
- */
- HTableDescriptor getTableDescriptor() throws IOException;
-
- /**
- * Test for the existence of columns in the table, as specified by the Get.
- * <p>
- *
- * This will return true if the Get matches one or more keys, false if not.
- * <p>
- *
- * This is a server-side call so it prevents any data from being transfered to
- * the client.
- *
- * @param get the Get
- * @return true if the specified Get matches one or more keys, false if not
- * @throws IOException e
- */
- boolean exists(Get get) throws IOException;
-
- /**
- * Test for the existence of columns in the table, as specified by the Gets.
- * <p>
- *
- * This will return an array of booleans. Each value will be true if the related Get matches
- * one or more keys, false if not.
- * <p>
- *
- * This is a server-side call so it prevents any data from being transfered to
- * the client.
- *
- * @param gets the Gets
- * @return Array of Boolean true if the specified Get matches one or more keys, false if not
- * @throws IOException e
- */
- Boolean[] exists(List<Get> gets) throws IOException;
-
- /**
- * Method that does a batch call on Deletes, Gets, Puts, Increments and Appends.
- * The ordering of execution of the actions is not defined. Meaning if you do a Put and a
- * Get in the same {@link #batch} call, you will not necessarily be
- * guaranteed that the Get returns what the Put had put.
- *
- * @param actions list of Get, Put, Delete, Increment, Append objects
- * @param results Empty Object[], same size as actions. Provides access to partial
- * results, in case an exception is thrown. A null in the result array means that
- * the call for that action failed, even after retries
- * @throws IOException
- * @since 0.90.0
- */
- void batch(final List<? extends Row> actions, final Object[] results) throws IOException,
- InterruptedException;
-
- /**
- * Same as {@link #batch(List, Object[])}, but returns an array of
- * results instead of using a results parameter reference.
- *
- * @param actions list of Get, Put, Delete, Increment, Append objects
- * @return the results from the actions. A null in the return array means that
- * the call for that action failed, even after retries
- * @throws IOException
- * @since 0.90.0
- * @deprecated If any exception is thrown by one of the actions, there is no way to
- * retrieve the partially executed results. Use {@link #batch(List, Object[])} instead.
- */
- Object[] batch(final List<? extends Row> actions) throws IOException, InterruptedException;
-
- /**
- * Same as {@link #batch(List, Object[])}, but with a callback.
- * @since 0.96.0
- */
- <R> void batchCallback(
- final List<? extends Row> actions, final Object[] results, final Batch.Callback<R> callback
- )
- throws IOException, InterruptedException;
-
-
- /**
- * Same as {@link #batch(List)}, but with a callback.
- * @since 0.96.0
- * @deprecated If any exception is thrown by one of the actions, there is no way to
- * retrieve the partially executed results. Use
- * {@link #batchCallback(List, Object[], org.apache.hadoop.hbase.client.coprocessor.Batch.Callback)}
- * instead.
- */
- <R> Object[] batchCallback(
- List<? extends Row> actions, Batch.Callback<R> callback
- ) throws IOException,
- InterruptedException;
-
- /**
- * Extracts certain cells from a given row.
- * @param get The object that specifies what data to fetch and from which row.
- * @return The data coming from the specified row, if it exists. If the row
- * specified doesn't exist, the {@link Result} instance returned won't
- * contain any {@link KeyValue}, as indicated by {@link Result#isEmpty()}.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- Result get(Get get) throws IOException;
-
- /**
- * Extracts certain cells from the given rows, in batch.
- *
- * @param gets The objects that specify what data to fetch and from which rows.
- *
- * @return The data coming from the specified rows, if it exists. If the row
- * specified doesn't exist, the {@link Result} instance returned won't
- * contain any {@link KeyValue}, as indicated by {@link Result#isEmpty()}.
- * If there are any failures even after retries, there will be a null in
- * the results array for those Gets, AND an exception will be thrown.
- * @throws IOException if a remote or network exception occurs.
- *
- * @since 0.90.0
- */
- Result[] get(List<Get> gets) throws IOException;
-
- /**
- * Return the row that matches <i>row</i> exactly,
- * or the one that immediately precedes it.
- *
- * @param row A row key.
- * @param family Column family to include in the {@link Result}.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- *
- * @deprecated As of version 0.92 this method is deprecated without
- * replacement. Since version 0.96+, you can use reversed scan.
- * getRowOrBefore is used internally to find entries in hbase:meta and makes
- * various assumptions about the table (which are true for hbase:meta but not
- * in general) to be efficient.
- */
- Result getRowOrBefore(byte[] row, byte[] family) throws IOException;
-
- /**
- * Returns a scanner on the current table as specified by the {@link Scan}
- * object.
- * Note that the passed {@link Scan}'s start row and caching properties
- * maybe changed.
- *
- * @param scan A configured {@link Scan} object.
- * @return A scanner.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- ResultScanner getScanner(Scan scan) throws IOException;
-
- /**
- * Gets a scanner on the current table for the given family.
- *
- * @param family The column family to scan.
- * @return A scanner.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- ResultScanner getScanner(byte[] family) throws IOException;
-
- /**
- * Gets a scanner on the current table for the given family and qualifier.
- *
- * @param family The column family to scan.
- * @param qualifier The column qualifier to scan.
- * @return A scanner.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- ResultScanner getScanner(byte[] family, byte[] qualifier) throws IOException;
-
-
- /**
- * Puts some data in the table.
- * <p>
- * If {@link #isAutoFlush isAutoFlush} is false, the update is buffered
- * until the internal buffer is full.
- * @param put The data to put.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- void put(Put put) throws IOException;
-
- /**
- * Puts some data in the table, in batch.
- * <p>
- * If {@link #isAutoFlush isAutoFlush} is false, the update is buffered
- * until the internal buffer is full.
- * <p>
- * This can be used for group commit, or for submitting user defined
- * batches. The writeBuffer will be periodically inspected while the List
- * is processed, so depending on the List size the writeBuffer may flush
- * not at all, or more than once.
- * @param puts The list of mutations to apply. The batch put is done by
- * aggregating the iteration of the Puts over the write buffer
- * at the client-side for a single RPC call.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- void put(List<Put> puts) throws IOException;
-
- /**
- * Atomically checks if a row/family/qualifier value matches the expected
- * value. If it does, it adds the put. If the passed value is null, the check
- * is for the lack of column (ie: non-existance)
- *
- * @param row to check
- * @param family column family to check
- * @param qualifier column qualifier to check
- * @param value the expected value
- * @param put data to put if check succeeds
- * @throws IOException e
- * @return true if the new put was executed, false otherwise
- */
- boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,
- byte[] value, Put put) throws IOException;
-
- boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,
- CompareOp compareOp, byte[] value, Put put) throws IOException;
- /**
- * Deletes the specified cells/row.
- *
- * @param delete The object that specifies what to delete.
- * @throws IOException if a remote or network exception occurs.
- * @since 0.20.0
- */
- void delete(Delete delete) throws IOException;
-
- /**
- * Deletes the specified cells/rows in bulk.
- * @param deletes List of things to delete. List gets modified by this
- * method (in particular it gets re-ordered, so the order in which the elements
- * are inserted in the list gives no guarantee as to the order in which the
- * {@link Delete}s are executed).
- * @throws IOException if a remote or network exception occurs. In that case
- * the {@code deletes} argument will contain the {@link Delete} instances
- * that have not be successfully applied.
- * @since 0.20.1
- */
- void delete(List<Delete> deletes) throws IOException;
-
- /**
- * Atomically checks if a row/family/qualifier value matches the expected
- * value. If it does, it adds the delete. If the passed value is null, the
- * check is for the lack of column (ie: non-existance)
- *
- * @param row to check
- * @param family column family to check
- * @param qualifier column qualifier to check
- * @param value the expected value
- * @param delete data to delete if check succeeds
- * @throws IOException e
- * @return true if the new delete was executed, false otherwise
- */
- boolean checkAndDelete(byte[] row, byte[] family, byte[] qualifier,
- byte[] value, Delete delete) throws IOException;
-
- boolean checkAndDelete(byte[] row, byte[] family, byte[] qualifier,
- CompareOp compareOp, byte[] value, Delete delete) throws IOException;
-
- /**
- * Performs multiple mutations atomically on a single row. Currently
- * {@link Put} and {@link Delete} are supported.
- *
- * @param rm object that specifies the set of mutations to perform atomically
- * @throws IOException
- */
- void mutateRow(final RowMutations rm) throws IOException;
-
- /**
- * Appends values to one or more columns within a single row.
- * <p>
- * This operation does not appear atomic to readers. Appends are done
- * under a single row lock, so write operations to a row are synchronized, but
- * readers do not take row locks so get and scan operations can see this
- * operation partially completed.
- *
- * @param append object that specifies the columns and amounts to be used
- * for the increment operations
- * @throws IOException e
- * @return values of columns after the append operation (maybe null)
- */
- Result append(final Append append) throws IOException;
-
- /**
- * Increments one or more columns within a single row.
- * <p>
- * This operation does not appear atomic to readers. Increments are done
- * under a single row lock, so write operations to a row are synchronized, but
- * readers do not take row locks so get and scan operations can see this
- * operation partially completed.
- *
- * @param increment object that specifies the columns and amounts to be used
- * for the increment operations
- * @throws IOException e
- * @return values of columns after the increment
- */
- Result increment(final Increment increment) throws IOException;
-
- /**
- * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}
- * <p>
- * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.
- * @param row The row that contains the cell to increment.
- * @param family The column family of the cell to increment.
- * @param qualifier The column qualifier of the cell to increment.
- * @param amount The amount to increment the cell with (or decrement, if the
- * amount is negative).
- * @return The new value, post increment.
- * @throws IOException if a remote or network exception occurs.
- */
- long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,
- long amount) throws IOException;
-
- /**
- * Atomically increments a column value. If the column value already exists
- * and is not a big-endian long, this could throw an exception. If the column
- * value does not yet exist it is initialized to <code>amount</code> and
- * written to the specified column.
- *
- * <p>Setting durability to {@link Durability#SKIP_WAL} means that in a fail
- * scenario you will lose any increments that have not been flushed.
- * @param row The row that contains the cell to increment.
- * @param family The column family of the cell to increment.
- * @param qualifier The column qualifier of the cell to increment.
- * @param amount The amount to increment the cell with (or decrement, if the
- * amount is negative).
- * @param durability The persistence guarantee for this increment.
- * @return The new value, post increment.
- * @throws IOException if a remote or network exception occurs.
- */
- long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,
- long amount, Durability durability) throws IOException;
-
- /**
* @deprecated Use {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}
*/
@Deprecated
@@ -410,115 +49,11 @@ public interface HTableInterface extends Closeable {
throws IOException;
/**
- * Tells whether or not 'auto-flush' is turned on.
- *
- * @return {@code true} if 'auto-flush' is enabled (default), meaning
- * {@link Put} operations don't get buffered/delayed and are immediately
- * executed.
+ * @deprecated Use {@link #existsAll(java.util.List)} instead.
*/
- boolean isAutoFlush();
-
- /**
- * Executes all the buffered {@link Put} operations.
- * <p>
- * This method gets called once automatically for every {@link Put} or batch
- * of {@link Put}s (when <code>put(List<Put>)</code> is used) when
- * {@link #isAutoFlush} is {@code true}.
- * @throws IOException if a remote or network exception occurs.
- */
- void flushCommits() throws IOException;
-
- /**
- * Releases any resources held or pending changes in internal buffers.
- *
- * @throws IOException if a remote or network exception occurs.
- */
- void close() throws IOException;
-
- /**
- * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the
- * table region containing the specified row. The row given does not actually have
- * to exist. Whichever region would contain the row based on start and end keys will
- * be used. Note that the {@code row} parameter is also not passed to the
- * coprocessor handler registered for this protocol, unless the {@code row}
- * is separately passed as an argument in the service request. The parameter
- * here is only used to locate the region used to handle the call.
- *
- * <p>
- * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published
- * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:
- * </p>
- *
- * <div style="background-color: #cccccc; padding: 2px">
- * <blockquote><pre>
- * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);
- * MyService.BlockingInterface service = MyService.newBlockingStub(channel);
- * MyCallRequest request = MyCallRequest.newBuilder()
- * ...
- * .build();
- * MyCallResponse response = service.myCall(null, request);
- * </pre></blockquote></div>
- *
- * @param row The row key used to identify the remote region location
- * @return A CoprocessorRpcChannel instance
- */
- CoprocessorRpcChannel coprocessorService(byte[] row);
-
- /**
- * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
- * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive),
- * and invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}
- * method with each {@link Service}
- * instance.
- *
- * @param service the protocol buffer {@code Service} implementation to call
- * @param startKey start region selection with region containing this row. If {@code null}, the
- * selection will start with the first table region.
- * @param endKey select regions up to and including the region containing this row.
- * If {@code null}, selection will continue through the last table region.
- * @param callable this instance's
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}
- * method will be invoked once per table region, using the {@link Service}
- * instance connected to that region.
- * @param <T> the {@link Service} subclass to connect to
- * @param <R> Return type for the {@code callable} parameter's
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
- * @return a map of result values keyed by region name
- */
- <T extends Service, R> Map<byte[],R> coprocessorService(final Class<T> service,
- byte[] startKey, byte[] endKey, final Batch.Call<T,R> callable)
- throws ServiceException, Throwable;
+ @Deprecated
+ Boolean[] exists(List<Get> gets) throws IOException;
- /**
- * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
- * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive),
- * and invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}
- * method with each {@link Service} instance.
- *
- * <p>
- * The given
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[], byte[], Object)}
- * method will be called with the return value from each region's
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation.
- *</p>
- *
- * @param service the protocol buffer {@code Service} implementation to call
- * @param startKey start region selection with region containing this row. If {@code null}, the
- * selection will start with the first table region.
- * @param endKey select regions up to and including the region containing this row.
- * If {@code null}, selection will continue through the last table region.
- * @param callable this instance's
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
- * will be invoked once per table region, using the {@link Service} instance
- * connected to that region.
- * @param callback
- * @param <T> the {@link Service} subclass to connect to
- * @param <R> Return type for the {@code callable} parameter's
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
- */
- <T extends Service, R> void coprocessorService(final Class<T> service,
- byte[] startKey, byte[] endKey, final Batch.Call<T,R> callable,
- final Batch.Callback<R> callback) throws ServiceException, Throwable;
/**
* See {@link #setAutoFlush(boolean, boolean)}
@@ -572,89 +107,20 @@ public interface HTableInterface extends Closeable {
void setAutoFlush(boolean autoFlush, boolean clearBufferOnFail);
/**
- * Set the autoFlush behavior, without changing the value of {@code clearBufferOnFail}
- */
- void setAutoFlushTo(boolean autoFlush);
-
- /**
- * Returns the maximum size in bytes of the write buffer for this HTable.
- * <p>
- * The default value comes from the configuration parameter
- * {@code hbase.client.write.buffer}.
- * @return The size of the write buffer in bytes.
- */
- long getWriteBufferSize();
-
- /**
- * Sets the size of the buffer in bytes.
- * <p>
- * If the new size is less than the current amount of data in the
- * write buffer, the buffer gets flushed.
- * @param writeBufferSize The new write buffer size, in bytes.
+ * Return the row that matches <i>row</i> exactly,
+ * or the one that immediately precedes it.
+ *
+ * @param row A row key.
+ * @param family Column family to include in the {@link Result}.
* @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ *
+ * @deprecated As of version 0.92 this method is deprecated without
+ * replacement. Since version 0.96+, you can use reversed scan.
+ * getRowOrBefore is used internally to find entries in hbase:meta and makes
+ * various assumptions about the table (which are true for hbase:meta but not
+ * in general) to be efficient.
*/
- void setWriteBufferSize(long writeBufferSize) throws IOException;
-
- /**
- * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
- * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all
- * the invocations to the same region server will be batched into one call. The coprocessor
- * service is invoked according to the service instance, method name and parameters.
- *
- * @param methodDescriptor
- * the descriptor for the protobuf service method to call.
- * @param request
- * the method call parameters
- * @param startKey
- * start region selection with region containing this row. If {@code null}, the
- * selection will start with the first table region.
- * @param endKey
- * select regions up to and including the region containing this row. If {@code null},
- * selection will continue through the last table region.
- * @param responsePrototype
- * the proto type of the response of the method in Service.
- * @param <R>
- * the response type for the coprocessor Service method
- * @throws ServiceException
- * @throws Throwable
- * @return a map of result values keyed by region name
- */
- <R extends Message> Map<byte[], R> batchCoprocessorService(
- Descriptors.MethodDescriptor methodDescriptor, Message request,
- byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable;
-
- /**
- * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
- * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all
- * the invocations to the same region server will be batched into one call. The coprocessor
- * service is invoked according to the service instance, method name and parameters.
- *
- * <p>
- * The given
- * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}
- * method will be called with the return value from each region's invocation.
- * </p>
- *
- * @param methodDescriptor
- * the descriptor for the protobuf service method to call.
- * @param request
- * the method call parameters
- * @param startKey
- * start region selection with region containing this row. If {@code null}, the
- * selection will start with the first table region.
- * @param endKey
- * select regions up to and including the region containing this row. If {@code null},
- * selection will continue through the last table region.
- * @param responsePrototype
- * the proto type of the response of the method in Service.
- * @param callback
- * callback to invoke with the response for each region
- * @param <R>
- * the response type for the coprocessor Service method
- * @throws ServiceException
- * @throws Throwable
- */
- <R extends Message> void batchCoprocessorService(Descriptors.MethodDescriptor methodDescriptor,
- Message request, byte[] startKey, byte[] endKey, R responsePrototype,
- Batch.Callback<R> callback) throws ServiceException, Throwable;
+ @Deprecated
+ Result getRowOrBefore(byte[] row, byte[] family) throws IOException;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/211c1e8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java
new file mode 100644
index 0000000..d55cb16
--- /dev/null
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java
@@ -0,0 +1,601 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.client;
+
+import com.google.protobuf.Descriptors;
+import com.google.protobuf.Message;
+import com.google.protobuf.Service;
+import com.google.protobuf.ServiceException;
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.client.coprocessor.Batch;
+import org.apache.hadoop.hbase.filter.CompareFilter;
+import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Used to communicate with a single HBase table.
+ * Obtain an instance from an {@link HConnection}.
+ *
+ * @since 0.99.0
+ */
+
+@InterfaceAudience.Public
+@InterfaceStability.Stable
+public interface Table extends Closeable {
+ /**
+ * Gets the fully qualified table name instance of this table.
+ */
+ TableName getName();
+
+ /**
+ * Returns the {@link org.apache.hadoop.conf.Configuration} object used by this instance.
+ * <p>
+ * The reference returned is not a copy, so any change made to it will
+ * affect this instance.
+ */
+ Configuration getConfiguration();
+
+ /**
+ * Gets the {@link org.apache.hadoop.hbase.HTableDescriptor table descriptor} for this table.
+ * @throws java.io.IOException if a remote or network exception occurs.
+ */
+ HTableDescriptor getTableDescriptor() throws IOException;
+
+ /**
+ * Test for the existence of columns in the table, as specified by the Get.
+ * <p>
+ *
+ * This will return true if the Get matches one or more keys, false if not.
+ * <p>
+ *
+ * This is a server-side call so it prevents any data from being transfered to
+ * the client.
+ *
+ * @param get the Get
+ * @return true if the specified Get matches one or more keys, false if not
+ * @throws IOException e
+ */
+ boolean exists(Get get) throws IOException;
+
+ /**
+ * Test for the existence of columns in the table, as specified by the Gets.
+ * <p>
+ *
+ * This will return an array of booleans. Each value will be true if the related Get matches
+ * one or more keys, false if not.
+ * <p>
+ *
+ * This is a server-side call so it prevents any data from being transferred to
+ * the client.
+ *
+ * @param gets the Gets
+ * @return Array of boolean. True if the specified Get matches one or more keys, false if not.
+ * @throws IOException e
+ */
+ boolean[] existsAll(List<Get> gets) throws IOException;
+
+ /**
+ * Method that does a batch call on Deletes, Gets, Puts, Increments and Appends.
+ * The ordering of execution of the actions is not defined. Meaning if you do a Put and a
+ * Get in the same {@link #batch} call, you will not necessarily be
+ * guaranteed that the Get returns what the Put had put.
+ *
+ * @param actions list of Get, Put, Delete, Increment, Append objects
+ * @param results Empty Object[], same size as actions. Provides access to partial
+ * results, in case an exception is thrown. A null in the result array means that
+ * the call for that action failed, even after retries
+ * @throws IOException
+ * @since 0.90.0
+ */
+ void batch(final List<? extends Row> actions, final Object[] results) throws IOException,
+ InterruptedException;
+
+ /**
+ * Same as {@link #batch(List, Object[])}, but returns an array of
+ * results instead of using a results parameter reference.
+ *
+ * @param actions list of Get, Put, Delete, Increment, Append objects
+ * @return the results from the actions. A null in the return array means that
+ * the call for that action failed, even after retries
+ * @throws IOException
+ * @since 0.90.0
+ * @deprecated If any exception is thrown by one of the actions, there is no way to
+ * retrieve the partially executed results. Use {@link #batch(List, Object[])} instead.
+ */
+ @Deprecated
+ Object[] batch(final List<? extends Row> actions) throws IOException, InterruptedException;
+
+ /**
+ * Same as {@link #batch(List, Object[])}, but with a callback.
+ * @since 0.96.0
+ */
+ <R> void batchCallback(
+ final List<? extends Row> actions, final Object[] results, final Batch.Callback<R> callback
+ )
+ throws IOException, InterruptedException;
+
+ /**
+ * Same as {@link #batch(List)}, but with a callback.
+ *
+ * @since 0.96.0
+ * @deprecated If any exception is thrown by one of the actions, there is no way to retrieve the
+ * partially executed results. Use {@link #batchCallback(List, Object[],
+ * org.apache.hadoop.hbase.client.coprocessor.Batch.Callback)} instead.
+ */
+ @Deprecated
+ <R> Object[] batchCallback(
+ List<? extends Row> actions, Batch.Callback<R> callback
+ ) throws IOException,
+ InterruptedException;
+
+ /**
+ * Extracts certain cells from a given row.
+ * @param get The object that specifies what data to fetch and from which row.
+ * @return The data coming from the specified row, if it exists. If the row
+ * specified doesn't exist, the {@link Result} instance returned won't
+ * contain any {@link org.apache.hadoop.hbase.KeyValue}, as indicated by {@link Result#isEmpty()}.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ Result get(Get get) throws IOException;
+
+ /**
+ * Extracts certain cells from the given rows, in batch.
+ *
+ * @param gets The objects that specify what data to fetch and from which rows.
+ * @return The data coming from the specified rows, if it exists. If the row specified doesn't
+ * exist, the {@link Result} instance returned won't contain any {@link
+ * org.apache.hadoop.hbase.KeyValue}, as indicated by {@link Result#isEmpty()}. If there are any
+ * failures even after retries, there will be a null in the results array for those Gets, AND an
+ * exception will be thrown.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.90.0
+ */
+ Result[] get(List<Get> gets) throws IOException;
+
+ /**
+ * Returns a scanner on the current table as specified by the {@link Scan}
+ * object.
+ * Note that the passed {@link Scan}'s start row and caching properties
+ * maybe changed.
+ *
+ * @param scan A configured {@link Scan} object.
+ * @return A scanner.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ ResultScanner getScanner(Scan scan) throws IOException;
+
+ /**
+ * Gets a scanner on the current table for the given family.
+ *
+ * @param family The column family to scan.
+ * @return A scanner.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ ResultScanner getScanner(byte[] family) throws IOException;
+
+ /**
+ * Gets a scanner on the current table for the given family and qualifier.
+ *
+ * @param family The column family to scan.
+ * @param qualifier The column qualifier to scan.
+ * @return A scanner.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ ResultScanner getScanner(byte[] family, byte[] qualifier) throws IOException;
+
+
+ /**
+ * Puts some data in the table.
+ * <p>
+ * If {@link #isAutoFlush isAutoFlush} is false, the update is buffered
+ * until the internal buffer is full.
+ * @param put The data to put.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ void put(Put put) throws IOException;
+
+ /**
+ * Puts some data in the table, in batch.
+ * <p>
+ * If {@link #isAutoFlush isAutoFlush} is false, the update is buffered
+ * until the internal buffer is full.
+ * <p>
+ * This can be used for group commit, or for submitting user defined
+ * batches. The writeBuffer will be periodically inspected while the List
+ * is processed, so depending on the List size the writeBuffer may flush
+ * not at all, or more than once.
+ * @param puts The list of mutations to apply. The batch put is done by
+ * aggregating the iteration of the Puts over the write buffer
+ * at the client-side for a single RPC call.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ void put(List<Put> puts) throws IOException;
+
+ /**
+ * Atomically checks if a row/family/qualifier value matches the expected
+ * value. If it does, it adds the put. If the passed value is null, the check
+ * is for the lack of column (ie: non-existance)
+ *
+ * @param row to check
+ * @param family column family to check
+ * @param qualifier column qualifier to check
+ * @param value the expected value
+ * @param put data to put if check succeeds
+ * @throws IOException e
+ * @return true if the new put was executed, false otherwise
+ */
+ boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,
+ byte[] value, Put put) throws IOException;
+
+ /**
+ * Atomically checks if a row/family/qualifier value matches the expected
+ * value. If it does, it adds the put. If the passed value is null, the check
+ * is for the lack of column (ie: non-existance)
+ *
+ * @param row to check
+ * @param family column family to check
+ * @param qualifier column qualifier to check
+ * @param compareOp comparison operator to use
+ * @param value the expected value
+ * @param put data to put if check succeeds
+ * @throws IOException e
+ * @return true if the new put was executed, false otherwise
+ */
+ boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,
+ CompareFilter.CompareOp compareOp, byte[] value, Put put) throws IOException;
+
+ /**
+ * Deletes the specified cells/row.
+ *
+ * @param delete The object that specifies what to delete.
+ * @throws IOException if a remote or network exception occurs.
+ * @since 0.20.0
+ */
+ void delete(Delete delete) throws IOException;
+
+ /**
+ * Deletes the specified cells/rows in bulk.
+ * @param deletes List of things to delete. List gets modified by this
+ * method (in particular it gets re-ordered, so the order in which the elements
+ * are inserted in the list gives no guarantee as to the order in which the
+ * {@link Delete}s are executed).
+ * @throws IOException if a remote or network exception occurs. In that case
+ * the {@code deletes} argument will contain the {@link Delete} instances
+ * that have not be successfully applied.
+ * @since 0.20.1
+ */
+ void delete(List<Delete> deletes) throws IOException;
+
+ /**
+ * Atomically checks if a row/family/qualifier value matches the expected
+ * value. If it does, it adds the delete. If the passed value is null, the
+ * check is for the lack of column (ie: non-existance)
+ *
+ * @param row to check
+ * @param family column family to check
+ * @param qualifier column qualifier to check
+ * @param value the expected value
+ * @param delete data to delete if check succeeds
+ * @throws IOException e
+ * @return true if the new delete was executed, false otherwise
+ */
+ boolean checkAndDelete(byte[] row, byte[] family, byte[] qualifier,
+ byte[] value, Delete delete) throws IOException;
+
+ /**
+ * Atomically checks if a row/family/qualifier value matches the expected
+ * value. If it does, it adds the delete. If the passed value is null, the
+ * check is for the lack of column (ie: non-existance)
+ *
+ * @param row to check
+ * @param family column family to check
+ * @param qualifier column qualifier to check
+ * @param compareOp comparison operator to use
+ * @param value the expected value
+ * @param delete data to delete if check succeeds
+ * @throws IOException e
+ * @return true if the new delete was executed, false otherwise
+ */
+ boolean checkAndDelete(byte[] row, byte[] family, byte[] qualifier,
+ CompareFilter.CompareOp compareOp, byte[] value, Delete delete) throws IOException;
+
+ /**
+ * Performs multiple mutations atomically on a single row. Currently
+ * {@link Put} and {@link Delete} are supported.
+ *
+ * @param rm object that specifies the set of mutations to perform atomically
+ * @throws IOException
+ */
+ void mutateRow(final RowMutations rm) throws IOException;
+
+ /**
+ * Appends values to one or more columns within a single row.
+ * <p>
+ * This operation does not appear atomic to readers. Appends are done
+ * under a single row lock, so write operations to a row are synchronized, but
+ * readers do not take row locks so get and scan operations can see this
+ * operation partially completed.
+ *
+ * @param append object that specifies the columns and amounts to be used
+ * for the increment operations
+ * @throws IOException e
+ * @return values of columns after the append operation (maybe null)
+ */
+ Result append(final Append append) throws IOException;
+
+ /**
+ * Increments one or more columns within a single row.
+ * <p>
+ * This operation does not appear atomic to readers. Increments are done
+ * under a single row lock, so write operations to a row are synchronized, but
+ * readers do not take row locks so get and scan operations can see this
+ * operation partially completed.
+ *
+ * @param increment object that specifies the columns and amounts to be used
+ * for the increment operations
+ * @throws IOException e
+ * @return values of columns after the increment
+ */
+ Result increment(final Increment increment) throws IOException;
+
+ /**
+ * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}
+ * <p>
+ * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.
+ * @param row The row that contains the cell to increment.
+ * @param family The column family of the cell to increment.
+ * @param qualifier The column qualifier of the cell to increment.
+ * @param amount The amount to increment the cell with (or decrement, if the
+ * amount is negative).
+ * @return The new value, post increment.
+ * @throws IOException if a remote or network exception occurs.
+ */
+ long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,
+ long amount) throws IOException;
+
+ /**
+ * Atomically increments a column value. If the column value already exists
+ * and is not a big-endian long, this could throw an exception. If the column
+ * value does not yet exist it is initialized to <code>amount</code> and
+ * written to the specified column.
+ *
+ * <p>Setting durability to {@link Durability#SKIP_WAL} means that in a fail
+ * scenario you will lose any increments that have not been flushed.
+ * @param row The row that contains the cell to increment.
+ * @param family The column family of the cell to increment.
+ * @param qualifier The column qualifier of the cell to increment.
+ * @param amount The amount to increment the cell with (or decrement, if the
+ * amount is negative).
+ * @param durability The persistence guarantee for this increment.
+ * @return The new value, post increment.
+ * @throws IOException if a remote or network exception occurs.
+ */
+ long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,
+ long amount, Durability durability) throws IOException;
+
+ /**
+ * Releases any resources held or pending changes in internal buffers.
+ *
+ * @throws IOException if a remote or network exception occurs.
+ */
+ @Override
+ void close() throws IOException;
+
+ /**
+ * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the
+ * table region containing the specified row. The row given does not actually have
+ * to exist. Whichever region would contain the row based on start and end keys will
+ * be used. Note that the {@code row} parameter is also not passed to the
+ * coprocessor handler registered for this protocol, unless the {@code row}
+ * is separately passed as an argument in the service request. The parameter
+ * here is only used to locate the region used to handle the call.
+ *
+ * <p>
+ * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published
+ * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:
+ * </p>
+ *
+ * <div style="background-color: #cccccc; padding: 2px">
+ * <blockquote><pre>
+ * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);
+ * MyService.BlockingInterface service = MyService.newBlockingStub(channel);
+ * MyCallRequest request = MyCallRequest.newBuilder()
+ * ...
+ * .build();
+ * MyCallResponse response = service.myCall(null, request);
+ * </pre></blockquote></div>
+ *
+ * @param row The row key used to identify the remote region location
+ * @return A CoprocessorRpcChannel instance
+ */
+ CoprocessorRpcChannel coprocessorService(byte[] row);
+
+ /**
+ * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
+ * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and
+ * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
+ * with each {@link com.google.protobuf.Service} instance.
+ *
+ * @param service the protocol buffer {@code Service} implementation to call
+ * @param startKey start region selection with region containing this row. If {@code null}, the
+ * selection will start with the first table region.
+ * @param endKey select regions up to and including the region containing this row. If {@code
+ * null}, selection will continue through the last table region.
+ * @param callable this instance's {@link org.apache.hadoop.hbase.client.coprocessor.Batch
+ * .Call#call}
+ * method will be invoked once per table region, using the {@link com.google.protobuf.Service}
+ * instance connected to that region.
+ * @param <T> the {@link com.google.protobuf.Service} subclass to connect to
+ * @param <R> Return type for the {@code callable} parameter's {@link
+ * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
+ * @return a map of result values keyed by region name
+ */
+ <T extends Service, R> Map<byte[],R> coprocessorService(final Class<T> service,
+ byte[] startKey, byte[] endKey, final Batch.Call<T,R> callable)
+ throws ServiceException, Throwable;
+
+ /**
+ * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
+ * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and
+ * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
+ * with each {@link Service} instance.
+ *
+ * <p> The given {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],
+ * byte[], Object)} method will be called with the return value from each region's {@link
+ * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. </p>
+ *
+ * @param service the protocol buffer {@code Service} implementation to call
+ * @param startKey start region selection with region containing this row. If {@code null}, the
+ * selection will start with the first table region.
+ * @param endKey select regions up to and including the region containing this row. If {@code
+ * null}, selection will continue through the last table region.
+ * @param callable this instance's {@link org.apache.hadoop.hbase.client.coprocessor.Batch
+ * .Call#call}
+ * method will be invoked once per table region, using the {@link Service} instance connected to
+ * that region.
+ * @param callback
+ * @param <T> the {@link Service} subclass to connect to
+ * @param <R> Return type for the {@code callable} parameter's {@link
+ * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method
+ */
+ <T extends Service, R> void coprocessorService(final Class<T> service,
+ byte[] startKey, byte[] endKey, final Batch.Call<T,R> callable,
+ final Batch.Callback<R> callback) throws ServiceException, Throwable;
+
+ /**
+ * Tells whether or not 'auto-flush' is turned on.
+ *
+ * @return {@code true} if 'auto-flush' is enabled (default), meaning
+ * {@link Put} operations don't get buffered/delayed and are immediately
+ * executed.
+ */
+ boolean isAutoFlush();
+
+ /**
+ * Executes all the buffered {@link Put} operations.
+ * <p>
+ * This method gets called once automatically for every {@link Put} or batch
+ * of {@link Put}s (when <code>put(List<Put>)</code> is used) when
+ * {@link #isAutoFlush} is {@code true}.
+ * @throws IOException if a remote or network exception occurs.
+ */
+ void flushCommits() throws IOException;
+
+ /**
+ * Set the autoFlush behavior, without changing the value of {@code clearBufferOnFail}
+ */
+ void setAutoFlushTo(boolean autoFlush);
+
+ /**
+ * Returns the maximum size in bytes of the write buffer for this HTable.
+ * <p>
+ * The default value comes from the configuration parameter
+ * {@code hbase.client.write.buffer}.
+ * @return The size of the write buffer in bytes.
+ */
+ long getWriteBufferSize();
+
+ /**
+ * Sets the size of the buffer in bytes.
+ * <p>
+ * If the new size is less than the current amount of data in the
+ * write buffer, the buffer gets flushed.
+ * @param writeBufferSize The new write buffer size, in bytes.
+ * @throws IOException if a remote or network exception occurs.
+ */
+ void setWriteBufferSize(long writeBufferSize) throws IOException;
+
+
+ /**
+ * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
+ * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all
+ * the invocations to the same region server will be batched into one call. The coprocessor
+ * service is invoked according to the service instance, method name and parameters.
+ *
+ * @param methodDescriptor
+ * the descriptor for the protobuf service method to call.
+ * @param request
+ * the method call parameters
+ * @param startKey
+ * start region selection with region containing this row. If {@code null}, the
+ * selection will start with the first table region.
+ * @param endKey
+ * select regions up to and including the region containing this row. If {@code null},
+ * selection will continue through the last table region.
+ * @param responsePrototype
+ * the proto type of the response of the method in Service.
+ * @param <R>
+ * the response type for the coprocessor Service method
+ * @throws ServiceException
+ * @throws Throwable
+ * @return a map of result values keyed by region name
+ */
+ <R extends Message> Map<byte[], R> batchCoprocessorService(
+ Descriptors.MethodDescriptor methodDescriptor, Message request,
+ byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable;
+
+ /**
+ * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table
+ * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all
+ * the invocations to the same region server will be batched into one call. The coprocessor
+ * service is invoked according to the service instance, method name and parameters.
+ *
+ * <p>
+ * The given
+ * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}
+ * method will be called with the return value from each region's invocation.
+ * </p>
+ *
+ * @param methodDescriptor
+ * the descriptor for the protobuf service method to call.
+ * @param request
+ * the method call parameters
+ * @param startKey
+ * start region selection with region containing this row. If {@code null}, the
+ * selection will start with the first table region.
+ * @param endKey
+ * select regions up to and including the region containing this row. If {@code null},
+ * selection will continue through the last table region.
+ * @param responsePrototype
+ * the proto type of the response of the method in Service.
+ * @param callback
+ * callback to invoke with the response for each region
+ * @param <R>
+ * the response type for the coprocessor Service method
+ * @throws ServiceException
+ * @throws Throwable
+ */
+ <R extends Message> void batchCoprocessorService(Descriptors.MethodDescriptor methodDescriptor,
+ Message request, byte[] startKey, byte[] endKey, R responsePrototype,
+ Batch.Callback<R> callback) throws ServiceException, Throwable;
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/211c1e8a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HTableWrapper.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HTableWrapper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HTableWrapper.java
index 057c493..fa28eac 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HTableWrapper.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HTableWrapper.java
@@ -140,6 +140,11 @@ public class HTableWrapper implements HTableInterface {
return table.exists(get);
}
+ public boolean[] existsAll(List<Get> gets) throws IOException{
+ return table.existsAll(gets);
+ }
+
+ @Deprecated
public Boolean[] exists(List<Get> gets) throws IOException{
return table.exists(gets);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/211c1e8a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
index 8fc618b..cf1416e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
@@ -371,15 +371,25 @@ public class RemoteHTable implements HTableInterface {
* exists(List) is really a list of get() calls. Just use get().
* @param gets list of Get to test for the existence
*/
- public Boolean[] exists(List<Get> gets) throws IOException {
+ public boolean[] existsAll(List<Get> gets) throws IOException {
LOG.warn("exists(List<Get>) is really list of get() calls, just use get()");
- Boolean[] results = new Boolean[gets.size()];
+ boolean[] results = new boolean[gets.size()];
for (int i = 0; i < results.length; i++) {
results[i] = exists(gets.get(i));
}
return results;
}
+ @Deprecated
+ public Boolean[] exists(List<Get> gets) throws IOException {
+ boolean[] results = existsAll(gets);
+ Boolean[] objectResults = new Boolean[results.length];
+ for (int i = 0; i < results.length; ++i) {
+ objectResults[i] = results[i];
+ }
+ return objectResults;
+ }
+
public void put(Put put) throws IOException {
CellSetModel model = buildModelFromPut(put);
StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/hbase/blob/211c1e8a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/HTablePool.java
----------------------------------------------------------------------
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/HTablePool.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/HTablePool.java
index 87a4da6..0ed6668 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/HTablePool.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/HTablePool.java
@@ -373,6 +373,12 @@ public class HTablePool implements Closeable {
}
@Override
+ public boolean[] existsAll(List<Get> gets) throws IOException {
+ checkState();
+ return table.existsAll(gets);
+ }
+
+ @Override
public Boolean[] exists(List<Get> gets) throws IOException {
checkState();
return table.exists(gets);