Hi
It look like the usage of HTablePool might be improved. Now, once you get the connection from pool you must take good care to return it by calling HTablePool.putTable(table); If you close the table (say, you don't read carefully the Javadoc) your htable will not be reused. Other case might be if you build a Datasource like object to obtain HTables and, in this case, from the client you don't have a reference to the pool to return the table once done with it.

I've fixed all this by subclassing the HTablePool and overriding the getTable method

public class HTablePoolEnhanced extends HTablePool
   @Override
    public HTableInterface getTable(String tableName) {
        return new PooledHTable(super.getTable(tableName));
    }

where PooledHTable is a inner class that wraps a HTable and reimplements the close method to return the table to pool

 public class PooledHTable implements HTableInterface {

        private HTableInterface table;

        public PooledHTable(HTableInterface table) {
            this.table = table;
        }

       @Override
        public void close() throws IOException {
            putTable(table);
        }
 ...
}

}

Does it make sense to have this implementation in Hbase also ? It look that all it needs is to have a new HTableInterfaceFactory implementation to create some proxy tables like i did.

Regards
Daniel

Reply via email to