for two different scan operations , will same instance of coprocessor
executes?

Thanks,
Raju,
(972)273-0155.

On Thu, Jul 6, 2017 at 11:53 AM, Ted Yu <[email protected]> wrote:

> sharedData is created when coprocessor is loaded (per region).
>
> So as long as the coprocessor instance doesn't change, the data you put in
> should be there.
>
> On Thu, Jul 6, 2017 at 9:20 AM, Veerraju Tadimeti <[email protected]>
> wrote:
>
> > Is sharedData per Operation request ?
> >
> > I mean for a scan operation, if we put variables in sharedData in
> > coprocessor, with a value,   will the same variables exists(with the same
> > value) in sharedData in coprocessor for new scan operation ?
> >
> > Thanks,
> > Raju,
> > (972)273-0155.
> >
> > On Thu, Jul 6, 2017 at 10:38 AM, Ted Yu <[email protected]> wrote:
> >
> > > sharedData is in RegionEnvironment which is created
> > > by RegionCoprocessorHost.
> > > RegionCoprocessorHost is per region.
> > >
> > > When variable is removed in postScannerClose(), it wouldn't affect
> > > sharedData
> > > in another region.
> > >
> > > FYI
> > >
> > > On Thu, Jul 6, 2017 at 7:14 AM, Veerraju Tadimeti <[email protected]>
> > > wrote:
> > >
> > > > hi,
> > > >
> > > > I have few questions regarding scope of
> *RegionCoprocessorEnvironment*
> > > >  sharedData.
> > > >
> > > >
> > > >
> > > >    - *Is sharedData map is shared accross all instances
> simultaneously
> > ?*
> > > >       -  I am putting a variable in sharedData in preScannerOpen()
> > based
> > > on
> > > >       scan attribute,
> > > >       - check that variable exists in postScannerNext() then apply
> > logic,
> > > >       - remove the variable postScannerClose().
> > > >       - If data is in multiple regions, when one coprocessor removes
> > > >       variable in postScannerClose(), will the variable is NULL for
> > > another
> > > >       region coprocessor in postScannerNext() ?
> > > >
> > > >
> > > >    - *    Is sharedData map is shared across all the client request
> > > >    operations ?*
> > > >
> > > > If a variable is set in sharedData for one client operation(say
> SCAN),
> > > will
> > > > the variable is available for another client operation(new SCAN) ?
> > > >
> > > >
> > > >    -  *Will the variables be garbage collected even if we dont
> > implement
> > > >    (removed variables in sharedData) postScannerClose() method*
> > > >
> > > >
> > > > Please find below the logic that I am using currently
> > > > *CODE: *
> > > >
> > > >     public RegionScanner
> > > > *preScannerOpen*(ObserverContext<RegionCoprocessorEnvironment>
> > > > e, Scan scan, RegionScanner s) throws IOException {
> > > >         byte[] useGetInPostScannerNext = scan.getAttribute(USE_GET_
> > > > OPERATION_IN_POST_SCANNER_NEXT);
> > > >         String useGetInPostScannerNextStr = Bytes.toString(
> > > > useGetInPostScannerNext);
> > > >         if (Boolean.parseBoolean(useGetInPostScannerNextStr)) {
> > > >             e.getEnvironment().getSharedData().put(USE_GET_
> > > > OPERATION_IN_POST_SCANNER_NEXT, useGetInPostScannerNextStr);
> > > >         }
> > > >         return super.preScannerOpen(e, scan, s);
> > > >     }
> > > >
> > > > @Override
> > > >     public boolean *postScannerNext*(final
> > > > ObserverContext<RegionCoprocessorEnvironment>
> > > > e,
> > > >             final InternalScanner s, final List<Result> results,
> final
> > > int
> > > > limit,
> > > >             final boolean hasMore) throws IOException {
> > > >         try {
> > > >
> > > >             if (canUseGetOperation(e)) {
> > > >
> > > >                //logic goes here
> > > >             }
> > > >         } catch (Exception ex) {
> > > >             logger.error("Exception in postScannerNext ", ex);
> > > >             throw new IOException(ex);
> > > >         }
> > > >         return hasMore;
> > > >     }
> > > >
> > > >     @Override
> > > >     public void
> > > > *postScannerClose*(ObserverContext<RegionCoprocessorEnvironment>
> > > > e, InternalScanner s) throws IOException {
> > > >         if (canUseGetOperation(e)) {
> > > >             e.getEnvironment().getSharedData().remove(USE_
> > > > GET_OPERATION_IN_POST_SCANNER_NEXT);
> > > >         }
> > > >         super.postScannerClose(e, s);
> > > >     }
> > > >
> > > >     private boolean *canUseGetOperation*(final
> > > > ObserverContext<RegionCoprocessorEnvironment>
> > > > e) {
> > > >         String useGetOperationInPostScannerNext = (String)
> > > > e.getEnvironment().getSharedData().get(USE_GET_
> > > OPERATION_IN_POST_SCANNER_
> > > > NEXT);
> > > >         return Boolean.parseBoolean(useGetOperationInPostScannerNe
> xt);
> > > >     }
> > > >
> > > > Thanks,
> > > > Raju,
> > > > (972)273-0155 <(972)%20273-0155>.
> > > >
> > >
> >
>

Reply via email to