@Override
  public void scannerClose(int id) throws IOError, IllegalArgument {
    LOG.debug("scannerClose: id={}", id);
    ResultScannerWrapper resultScannerWrapper = getScanner(id);
    if (resultScannerWrapper == null) {
      LOG.warn("scanner ID is invalid");
      throw new IllegalArgument("scanner ID is invalid");
    }
    resultScannerWrapper.getScanner().close();
    removeScanner(id);
  }
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