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>. > > >
