E - The CoprocessorEnvironment subclass applicable to the
revelant Observer interface.@InterfaceAudience.LimitedPrivate(value="Coprocesssor")
@InterfaceStability.Evolving
public interface ObserverContext<E extends CoprocessorEnvironment>
RegionObserver, MasterObserver, or WALObserver)
method. The same ObserverContext instance is passed sequentially to all loaded
coprocessors for a given Observer method trigger, with the
CoprocessorEnvironment reference set appropriately for each Coprocessor type:
e.g. the RegionCoprocessorEnvironment is passed to RegionCoprocessors, and so on.| Modifier and Type | Method and Description |
|---|---|
void |
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.
|
void |
complete()
Call to skip out on calling remaining coprocessors in current execution chain (there may be
more than one coprocessor chained to a method call).
|
Optional<User> |
getCaller()
Returns the active user for the coprocessor call.
|
E |
getEnvironment() |
E getEnvironment()
void bypass()
bypass 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.
complete()void complete()
Since hbase-2.0.0, only complete of 'bypassable' methods has an effect. See
javadoc on the Coprocessor Observer method as to whether bypass (and thereby 'complete') is
supported. This behavior of honoring only a subset of methods is new since hbase-2.0.0.
bypass()Optional<User> getCaller()
User 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.Copyright © 2007–2017 The Apache Software Foundation. All rights reserved.