[
https://issues.apache.org/jira/browse/HBASE-14268?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hiroshi Ikeda updated HBASE-14268:
----------------------------------
Attachment: HBASE-14268-V4.patch
Added a revised patch.
- Followed Ted Yu's comments.
- Changed the parameters' order of the {{WeakObjectPool}} constructor, and
added 2 overloaded constructors so that you can specify the initial capacity
and the concurrency level or use their default values. Actually, tuning the 2
optional parameters seems not so effective, and it seems enough to use the
default values(?)
- Added some javadoc comments to {{WeakObjectPool}.
- Added a new test class for {{WeakObjectPool}}.
BTW, I have found a similar work, Google Guava's CacheBuilder and classes
around that under the package com.google.common.cache. The classes seem quite
sophisticated (and complicated) so that they can cache any objects including
heavy ones, with preventing from excessively object creation. It seems that the
sophistication is over-spec for {{RentrantLock}}, and they are about 1.5-2
times slower than {{WeakObjectPool}} for caching {{ReentrantLock}} in my
environment.
> Improve KeyLocker
> -----------------
>
> Key: HBASE-14268
> URL: https://issues.apache.org/jira/browse/HBASE-14268
> Project: HBase
> Issue Type: Improvement
> Components: util
> Reporter: Hiroshi Ikeda
> Assignee: Hiroshi Ikeda
> Priority: Minor
> Attachments: HBASE-14268-V2.patch, HBASE-14268-V3.patch,
> HBASE-14268-V4.patch, HBASE-14268.patch, KeyLockerPerformance.java
>
>
> 1. In the implementation of {{KeyLocker}} it uses atomic variables inside a
> synchronized block, which doesn't make sense. Moreover, logic inside the
> synchronized block is not trivial so that it makes less performance in heavy
> multi-threaded environment.
> 2. {{KeyLocker}} gives an instance of {{RentrantLock}} which is already
> locked, but it doesn't follow the contract of {{ReentrantLock}} because you
> are not allowed to freely invoke lock/unlock methods under that contract.
> That introduces a potential risk; Whenever you see a variable of the type
> {{RentrantLock}}, you should pay attention to what the included instance is
> coming from.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)