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