If the two different scan operations are for the same region, same instance of coprocessor is involved.
Otherwise, different instances of coprocessor are involved. On Thu, Jul 6, 2017 at 11:22 AM, Veerraju Tadimeti <[email protected]> wrote: > 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>. > > > > > > > > > > > > > > >
