[ 
https://issues.apache.org/jira/browse/HBASE-13301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

zhangduo updated HBASE-13301:
-----------------------------
    Description: 
{code:title=BucketCache.java}
public boolean evictBlock(BlockCacheKey cacheKey) {
      ...
      if (bucketEntry.equals(backingMap.remove(cacheKey))) {
        bucketAllocator.freeBlock(bucketEntry.offset());
        realCacheSize.addAndGet(-1 * bucketEntry.getLength());
        blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);
        if (removedBlock == null) {
          this.blockNumber.decrementAndGet();
        }
      } else {
        return false;
      }
      ...
{code}

I think the problem is here. We remove a BucketEntry that should not be removed 
by us, but we do not put it back and also do not do any clean up.

  was:
{code:title=BucketCache.java}
public boolean evictBlock(BlockCacheKey cacheKey) {
      ...
      if (bucketEntry.equals(backingMap.remove(cacheKey))) {
        bucketAllocator.freeBlock(bucketEntry.offset());
        realCacheSize.addAndGet(-1 * bucketEntry.getLength());
        blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);
        if (removedBlock == null) {
          this.blockNumber.decrementAndGet();
        }
      } else {
        return false;
      }
      ...
{code}

I think the problem is here. We remove a BucketEntry that should not remove by 
us, but we do not put it back and also do not do any clean up.


> Possible memory leak in BucketCache
> -----------------------------------
>
>                 Key: HBASE-13301
>                 URL: https://issues.apache.org/jira/browse/HBASE-13301
>             Project: HBase
>          Issue Type: Bug
>          Components: BlockCache
>            Reporter: zhangduo
>            Assignee: zhangduo
>
> {code:title=BucketCache.java}
> public boolean evictBlock(BlockCacheKey cacheKey) {
>       ...
>       if (bucketEntry.equals(backingMap.remove(cacheKey))) {
>         bucketAllocator.freeBlock(bucketEntry.offset());
>         realCacheSize.addAndGet(-1 * bucketEntry.getLength());
>         blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);
>         if (removedBlock == null) {
>           this.blockNumber.decrementAndGet();
>         }
>       } else {
>         return false;
>       }
>       ...
> {code}
> I think the problem is here. We remove a BucketEntry that should not be 
> removed by us, but we do not put it back and also do not do any clean up.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to