diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java index 741989f..82d25c7 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java @@ -303,4 +303,9 @@ public interface ClusterConnection extends HConnection { */ public MetricsConnection getConnectionMetrics(); + /** + * @return true when this connection uses a {@link org.apache.hadoop.hbase.codec.Codec} and so + * supports cell blocks rather than Protobuffed Cells. + */ + boolean supportsCellBlock(); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java index dc59e6e..ced07ad 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java @@ -2255,4 +2255,9 @@ class ConnectionImplementation implements ClusterConnection, Closeable { return RpcRetryingCallerFactory .instantiate(conf, this.interceptor, this.getStatisticsTracker()); } + + @Override + public boolean supportsCellBlock() { + return this.rpcClient.supportsCellBlock(); + } } \ No newline at end of file diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java index 72ae829..20ee412 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScannable; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.DoNotRetryIOException; @@ -152,11 +151,8 @@ class MultiServerCallable extends RegionServerCallable impleme // This is not exact -- the configuration could have changed on us after connection was set up // but it will do for now. HConnection connection = getConnection(); - if (connection == null) return true; // Default is to do cellblocks. - Configuration configuration = connection.getConfiguration(); - if (configuration == null) return true; - String codec = configuration.get(HConstants.RPC_CODEC_CONF_KEY, ""); - return codec != null && codec.length() > 0; + if (!(connection instanceof ClusterConnection)) return true; // Default is to do cellblocks. + return ((ClusterConnection) connection).supportsCellBlock(); } @Override diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AbstractRpcClient.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AbstractRpcClient.java index e33ef3a..6b09c11 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AbstractRpcClient.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AbstractRpcClient.java @@ -149,6 +149,11 @@ public abstract class AbstractRpcClient implements RpcClient { } } + @Override + public boolean supportsCellBlock() { + return this.codec != null; + } + /** * Encapsulate the ugly casting and RuntimeException conversion in private method. * @param conf configuration diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java index cf689f5..7db68d4 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java @@ -83,4 +83,10 @@ import java.io.IOException; * using this client. */ @Override public void close(); + + /** + * @return true when this client uses a {@link org.apache.hadoop.hbase.codec.Codec} and so + * supports cell blocks rather than Protobuffed Cells. + */ + boolean supportsCellBlock(); } \ No newline at end of file