Details
Description
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.
Attachments
Attachments
Issue Links
- is depended upon by
-
HBASE-14463 Severe performance downgrade when parallel reading a single key from BucketCache
- Closed