You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Lijin Bin (Jira)" <ji...@apache.org> on 2019/12/03 03:09:00 UTC

[jira] [Updated] (HBASE-23356) When construct StoreScanner throw exceptions it is possible to left some KeyValueScanner not closed.

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

Lijin Bin updated HBASE-23356:
------------------------------
    Description: 
{code}
    try {
      // Pass columns to try to filter out unnecessary StoreFiles.
      List<KeyValueScanner> scanners = selectScannersFrom(store,
        store.getScanners(cacheBlocks, scanUsePread, false, matcher, scan.getStartRow(),
          scan.includeStartRow(), scan.getStopRow(), scan.includeStopRow(), this.readPt));

      // Seek all scanners to the start of the Row (or if the exact matching row
      // key does not exist, then to the start of the next matching Row).
      // Always check bloom filter to optimize the top row seek for delete
      // family marker.
      seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery && lazySeekEnabledGlobally,
        parallelSeekEnabled);
    
        ......
    } catch (IOException e) {
      // remove us from the HStore#changedReaderObservers here or we'll have no chance to
      // and might cause memory leak
      store.deleteChangedReaderObserver(this);
      throw e;
    }
{code}
Like the above, if the seekScanners(scanners,...) throws exception, the scanners do not closed, we need to close the scanners.

> When construct StoreScanner throw exceptions it is possible to left some KeyValueScanner not closed.
> ----------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-23356
>                 URL: https://issues.apache.org/jira/browse/HBASE-23356
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Lijin Bin
>            Assignee: Lijin Bin
>            Priority: Major
>
> {code}
>     try {
>       // Pass columns to try to filter out unnecessary StoreFiles.
>       List<KeyValueScanner> scanners = selectScannersFrom(store,
>         store.getScanners(cacheBlocks, scanUsePread, false, matcher, scan.getStartRow(),
>           scan.includeStartRow(), scan.getStopRow(), scan.includeStopRow(), this.readPt));
>       // Seek all scanners to the start of the Row (or if the exact matching row
>       // key does not exist, then to the start of the next matching Row).
>       // Always check bloom filter to optimize the top row seek for delete
>       // family marker.
>       seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery && lazySeekEnabledGlobally,
>         parallelSeekEnabled);
>     
>         ......
>     } catch (IOException e) {
>       // remove us from the HStore#changedReaderObservers here or we'll have no chance to
>       // and might cause memory leak
>       store.deleteChangedReaderObserver(this);
>       throw e;
>     }
> {code}
> Like the above, if the seekScanners(scanners,...) throws exception, the scanners do not closed, we need to close the scanners.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)