Scanners not closed properly in certain circumstances (memory leak)
-------------------------------------------------------------------

                 Key: HBASE-1927
                 URL: https://issues.apache.org/jira/browse/HBASE-1927
             Project: Hadoop HBase
          Issue Type: Bug
          Components: regionserver
    Affects Versions: 0.20.1
            Reporter: Erik Rozendaal
             Fix For: 0.20.2


Scanners are sometimes leaked by the KeyValueHeap class. The constructor adds 
each scanner to a heap, but only if the scanner's peek() method returns not 
null (line 58). Otherwise the scanner is dropped without being closed.

Unfortunately some scanners (like StoreScanner and MemStoreScanner) register 
themselves to some global list when constructed and only deregister on close(). 
This can cause a memory leak, for example with MemStoreScanners on an empty 
memory store.

The quick fix is to add an else clause to the if on line 58:

} else {
  scanner.close()
}

The root cause is that ownership of the scanners is transferred from the caller 
to the KeyValueHeap on construction. Maybe this should be made clear in the 
documentation or changed.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to