if (canUseGetOperation(e)) {
//logic goes here
Does your Get target the same region being scanned ?
If not, issuing the Get is not advised since the other region may be hosted
on different region server.
Cheers
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>.
>