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