[ 
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)
{noformat}
RegionScanner implements ShipperProvider {...}

interface ShipperProvider {
  Optional<Shipper> getShipper();
}
{noformat}

> 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
(v6.4.14#64029)

Reply via email to