@Override
  public void increment(TIncrement tincrement) throws IOError, TException {

    if (tincrement.getRow().length == 0 || tincrement.getTable().length == 0) {
      throw new TException("Must supply a table and a row key; can't increment");
    }

    if (conf.getBoolean(COALESCE_INC_KEY, false)) {
      this.coalescer.queueIncrement(tincrement);
      return;
    }

    Table table = null;
    try {
      table = getTable(tincrement.getTable());
      Increment inc = ThriftUtilities.incrementFromThrift(tincrement);
      table.increment(inc);
    } catch (IOException e) {
      LOG.warn(e.getMessage(), e);
      throw getIOError(e);
    } finally {
      closeTable(table);
    }
  }
Note: this internal interface is slightly different from public APIs in regard to handling of
the qualifier. Here we differ from the public Java API in that null != byte[0]. Rather, we
respect qual == null as a request for the entire column family. The caller (
{@link #getVerTs(ByteBuffer, ByteBuffer, ByteBuffer, long, int, Map)}) interface IS consistent
in that the column is parse like normal.
hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftHBaseServiceHandler.java