[
https://issues.apache.org/jira/browse/HBASE-2938?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12968888#action_12968888
]
stack commented on HBASE-2938:
------------------------------
@Karthik Sorry for taking so long getting to this issue. It looks very
interesting. What you say above makes a lot of sense. May I have an
illustration, a use case, where you've found this payload carrying facilitate
to be of use? FYI, Apache doesn't allow '@author' tags. Otherwise, patch
looks great.
> Add Thread-Local Behavior To HTable Pool
> ----------------------------------------
>
> Key: HBASE-2938
> URL: https://issues.apache.org/jira/browse/HBASE-2938
> Project: HBase
> Issue Type: Improvement
> Components: client
> Affects Versions: 0.89.20100621
> Reporter: Karthick Sankarachary
> Attachments: HBASE-2938.patch
>
>
> It is a well-documented fact that the HBase table client (viz., HTable) is
> not thread-safe. Hence, the recommendation has been to use a HTablePool or a
> ThreadLocal to manage access to tables. The downside of the latter is that it
> (a) requires the user to reinvent the wheel in terms of mapping table names
> to tables and (b) forces the user to maintain the thread-local objects.
> Ideally, it would be nice if we could make the HTablePool handle thread-local
> objects as well. That way, it not only becomes the "one stop shop" for all
> client-side tables, but also insulates the user from the ThreadLocal object.
>
> Here, we propose a way to generalize the HTablePool so that the underlying
> pool type is either "reusable" or "thread-local". To make this possible, we
> introdudce the concept of a SharedMap, which essentially, maps a key to a
> collection of values, the elements of which are managed by a pool. In effect,
> that collection acts as a shared pool of resources, access to which is
> closely controlled as dictated by the particular semantics of the pool.
> Furthermore, to simplify the construction of HTablePools, we added a couple
> of parameters (viz. "hbase.client.htable.pool.type" and
> "hbase.client.hbase.pool.size") to control the default behavior of a
> HTablePool.
>
> In case the size of the pool is set to a non-zero positive number, that is
> used to cap the number of resources that a pool may contain for any given
> key. A size of Integer#MAX_VALUE is interpreted to mean an unbounded pool.
>
> Currently, the SharedMap supports the following types of pools:
> * A ThreadLocalPool, which represents a pool that builds on the
> ThreadLocal class. It essentially binds the resource to the thread from which
> it is accessed.
> * A ReusablePool, which represents a pool that builds on the LinkedList
> class. It essentially allows resources to be checked out, at which point it
> is (temporarily) removed from the pool. When the resource is no longer
> required, it should be returned to the pool in order to be reused.
> * A RoundRobinPool, which represents a pool that stores its resources in
> an ArrayList. It load-balances access to its resources by returning a
> different resource every time a given key is looked up.
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.