hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Veerraju Tadimeti <tvvr...@gmail.com>
Subject scope of RegionCoprocessorEnvironment sharedData
Date Thu, 06 Jul 2017 14:14:34 GMT
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>.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message