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(useGetOperationInPostScannerNext);
> >     }
> >
> > Thanks,
> > Raju,
> > (972)273-0155 <(972)%20273-0155>.
> >
>

Reply via email to