Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
0.20.1
-
None
-
Reviewed
Description
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.