hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Appy (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-19047) CP exposed Scanner types should not extend Shipper
Date Fri, 27 Oct 2017 21:01:00 GMT

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

Appy commented on HBASE-19047:

Given the core design is already out there, and not a part of this patch, you don't necessarily
have to change it. This patch is already changing things for good. So am all +1 for it. Which
path do you want, take your pick:
- Deleting the check and assign  and get it in for alpha4.
- Separate out shipper from RegionScanner.
- Change RegionScanner *is a* Shipper (inheritance) to RegionScanner *has a* Shipper (composition).
And if the scanner after postScannerOpen returns empty Optional, then go with a default shipper.
(Probably best to do in follow-on for beta1)
RegionScanner implements ShipperProvider {...}

interface ShipperProvider {
  Optional<Shipper> getShipper();

> CP exposed Scanner types should not extend Shipper
> --------------------------------------------------
>                 Key: HBASE-19047
>                 URL: https://issues.apache.org/jira/browse/HBASE-19047
>             Project: HBase
>          Issue Type: Sub-task
>          Components: Coprocessors
>            Reporter: Anoop Sam John
>            Assignee: Anoop Sam John
>            Priority: Critical
>             Fix For: 2.0.0-alpha-4
>         Attachments: HBASE-19047.patch, HBASE-19047_V2.patch, HBASE-19047_V2.patch, HBASE-19047_V3.patch,
HBASE-19047_V4.patch, HBASE-19047_V4.patch, HBASE-19047_V4.patch
> Shipper is a IA.Private interface and very much internal.. 
> Right now CP exposed RegionScanner is extending this and so exposing the shipped() method.
This by mistake is called, can harm the correctness of the cells in the Results.
> preScannerOpen() allowing to return a new Scanner is also problematic now.  This can
allow users to create a Region scanner from Region and then wrap it and return back (Well
same can be done by postScannerOpen also), it can so happen that the wrapper is not implementing
the shipped() properly.  In any way exposing the shipped () is problematic.
> Solution Steps
> 1. Remove preScannerOpen() , the use case I can think of is wrapping the original scanner.
The original scanner can be created by Region.getScanner way only..  May be no need to remove
this hook.  Just remove the ability for it to return a RegionScanner instance.  Call this
with the Scan object and the CP can change the Scan object if they want.
> 2. Let RegionScanner not extending Shipper but only RegionScannerImpl implements this
> 3. We have ref to the RegionScanner created by core and let that be used by RegionScannerShippedCallBack
when the post hook doing a wrap.

This message was sent by Atlassian JIRA

View raw message