[ 
https://issues.apache.org/jira/browse/HBASE-10662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13919208#comment-13919208
 ] 

Feng Honghua commented on HBASE-10662:
--------------------------------------

When we find the region has been re-opened during serving scan request from 
client in regionserver, if we only remove RegionScannerHolder  from scanners 
but don't close the related scanner. The related lease will be cancelled when 
it expires, but the related region scanner won't be closed in leaseExpired as 
expected:
{code}
  public void leaseExpired() {
      RegionScannerHolder rsh = scanners.remove(this.scannerName);
      if (rsh != null) {
        RegionScanner s = rsh.s;
        LOG.info("Scanner " + this.scannerName + " lease expired on region "
            + s.getRegionInfo().getRegionNameAsString());
        try {
          HRegion region = getRegion(s.getRegionInfo().getRegionName());
          if (region != null && region.getCoprocessorHost() != null) {
            region.getCoprocessorHost().preScannerClose(s);
          }

          s.close();
          if (region != null && region.getCoprocessorHost() != null) {
            region.getCoprocessorHost().postScannerClose(s);
          }
        } catch (IOException e) {
          LOG.error("Closing scanner for "
              + s.getRegionInfo().getRegionNameAsString(), e);
        }
      } else {
        LOG.info("Scanner " + this.scannerName + " lease expired");
      }
    }
{code}
In above code, scanners.remove(this.scannerName) will return a null rsh since 
it has been removed earlier, so the region scanner can't be closed here, which 
means the related region scanner doesn't have a chance to be closed ever.

> RegionScanner should be closed and according lease should be cancelled in 
> regionserver immediately if we find the related region has been re-opened 
> during performing scan request
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-10662
>                 URL: https://issues.apache.org/jira/browse/HBASE-10662
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>            Reporter: Feng Honghua
>            Assignee: Feng Honghua
>         Attachments: HBASE-10662-trunk_v1.patch
>
>
> During regionserver processes scan request from client, it fails the request 
> by throwing a wrapped NotServingRegionException to client if it finds the 
> region related to the passed-in scanner-id has been re-opened, and it also 
> removes the RegionScannerHolder from the scanners. In fact under this case, 
> the old and invalid RegionScanner related to the passed-in scanner-id should 
> be closed and the related lease should be cancelled at the mean time as well.
> Currently region's related scanners aren't closed when closing the region, a 
> region scanner is closed only when requested explicitly by client, or by 
> expiration of the related lease, in this sense the close of region scanners 
> is quite passive and lag.
> Sounds reasonable to cleanup all related scanners and cancel these scanners' 
> leases after closing a region?



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to