Class ObserverContextImpl<E extends CoprocessorEnvironment>
- All Implemented Interfaces:
ObserverContext<E>
- Direct Known Subclasses:
CoprocessorHost.ObserverOperation
ObserverContext
, which serves as the interface for
third-party Coprocessor developers.-
Field Summary
-
Constructor Summary
ConstructorDescriptionObserverContextImpl
(User caller) ObserverContextImpl
(User caller, boolean bypassable) -
Method Summary
Modifier and TypeMethodDescriptionvoid
bypass()
Call to indicate that the current coprocessor's return value (or parameter -- depends on the call-type) should be used in place of the value that would be obtained via normal processing; i.e.static <E extends CoprocessorEnvironment>
ObserverContext<E>createAndPrepare
(E env) Deprecated.Returns the active user for the coprocessor call.boolean
void
boolean
-
Field Details
-
env
-
bypass
-
bypassable
Is this operation bypassable? -
caller
-
-
Constructor Details
-
ObserverContextImpl
-
ObserverContextImpl
-
-
Method Details
-
getEnvironment
- Specified by:
getEnvironment
in interfaceObserverContext<E extends CoprocessorEnvironment>
-
prepare
-
isBypassable
-
bypass
Description copied from interface:ObserverContext
Call to indicate that the current coprocessor's return value (or parameter -- depends on the call-type) should be used in place of the value that would be obtained via normal processing; i.e. bypass the core call and return the Coprocessor's result instead. DOES NOT work for all Coprocessor invocations, only on a small subset of methods, mostly preXXX calls in RegionObserver. Check javadoc on the pertinent Coprocessor Observer to see ifbypass
is supported.This behavior of honoring only a subset of methods is new since hbase-2.0.0.
Where bypass is supported what is being bypassed is all of the core code implementing the remainder of the operation. In order to understand what calling bypass() will skip, a coprocessor implementer should read and understand all of the remaining code and its nuances. Although this is good practice for coprocessor developers in general, it demands a lot. What is skipped is extremely version dependent. The core code will vary, perhaps significantly, even between point releases. We do not provide the promise of consistent behavior even between point releases for the bypass semantic. To achieve that we could not change any code between hook points. Therefore the coprocessor implementer becomes an HBase core developer in practice as soon as they rely on bypass(). Every release of HBase may break the assumption that the replacement for the bypassed code takes care of all necessary skipped concerns. Because those concerns can change at any point, such an assumption is never safe.
As of hbase2, when bypass has been set, we will NOT call any Coprocessors follow the bypassing Coprocessor; we cut short the processing and return the bypassing Coprocessors response (this used be a separate 'complete' option that has been folded into the 'bypass' in hbase2.
- Specified by:
bypass
in interfaceObserverContext<E extends CoprocessorEnvironment>
-
shouldBypass
- Returns:
true
, ifObserverContext.bypass()
was called by one of the loaded coprocessors,false
otherwise.
-
getCaller
Description copied from interface:ObserverContext
Returns the active user for the coprocessor call. If an explicitUser
instance was provided to the constructor, that will be returned, otherwise if we are in the context of an RPC call, the remote user is used. May not be present if the execution is outside of an RPC context.- Specified by:
getCaller
in interfaceObserverContext<E extends CoprocessorEnvironment>
-
createAndPrepare
@Deprecated public static <E extends CoprocessorEnvironment> ObserverContext<E> createAndPrepare(E env) Deprecated.Instantiates a new ObserverContext instance if the passed reference isnull
and sets the environment in the new or existing instance. This allows deferring the instantiation of a ObserverContext until it is actually needed.- Type Parameters:
E
- The environment type for the context- Parameters:
env
- The coprocessor environment to set- Returns:
- An instance of
ObserverContext
with the environment set
-