hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anoop Sam John (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HBASE-15198) RPC client not using Codec and CellBlock for puts by default
Date Mon, 01 Feb 2016 09:11:39 GMT
Anoop Sam John created HBASE-15198:

             Summary: RPC client not using Codec and CellBlock for puts by default
                 Key: HBASE-15198
                 URL: https://issues.apache.org/jira/browse/HBASE-15198
             Project: HBase
          Issue Type: Bug
            Reporter: Anoop Sam John
            Assignee: Anoop Sam John
            Priority: Critical

For puts we use MultiServerCallable. Here to decide whether to use cellBlock we have
private boolean isCellBlock() {
    // 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;
By default in hbase-default.xml, we dont have any Codec being specified.

Where as in AbstractRpcClient we have
Codec getCodec() {
    // For NO CODEC, "hbase.client.rpc.codec" must be configured with empty string AND
    // "hbase.client.default.rpc.codec" also -- because default is to do cell block encoding.
    String className = conf.get(HConstants.RPC_CODEC_CONF_KEY, getDefaultCodec(this.conf));
    if (className == null || className.length() == 0) return null;
    try {
      return (Codec)Class.forName(className).newInstance();
    } catch (Exception e) {
      throw new RuntimeException("Failed getting codec " + className, e);
public static String getDefaultCodec(final Configuration c) {
    // If "hbase.client.default.rpc.codec" is empty string -- you can't set it to null because
    // Configuration will complain -- then no default codec (and we'll pb everything).  Else
    // default is KeyValueCodec
    return c.get(DEFAULT_CODEC_CLASS, KeyValueCodec.class.getCanonicalName());
Our aim is to by def use Codec and it is KeyValueCodec.  

The codec finding in MultiServerCallable to be same way as in AbstractRpcClient and then only
we will be doing cellblock stuff.

This message was sent by Atlassian JIRA

View raw message