E
- the specific environment extension that a concrete implementation
provides@InterfaceAudience.LimitedPrivate(value="Coprocesssor") @InterfaceStability.Evolving public abstract class CoprocessorHost<E extends CoprocessorEnvironment> extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
CoprocessorHost.Environment
Encapsulation of the environment of each coprocessor
|
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
ABORT_ON_ERROR_KEY |
protected Abortable |
abortable |
protected Configuration |
conf |
protected java.util.SortedSet<E> |
coprocessors
Ordered set of loaded coprocessors with lock
|
static java.lang.String |
COPROCESSORS_ENABLED_CONF_KEY |
static boolean |
DEFAULT_ABORT_ON_ERROR |
static boolean |
DEFAULT_COPROCESSORS_ENABLED |
static boolean |
DEFAULT_USER_COPROCESSORS_ENABLED |
protected java.util.concurrent.atomic.AtomicInteger |
loadSequence |
static java.lang.String |
MASTER_COPROCESSOR_CONF_KEY |
protected java.lang.String |
pathPrefix |
static java.lang.String |
REGION_COPROCESSOR_CONF_KEY |
static java.lang.String |
REGIONSERVER_COPROCESSOR_CONF_KEY |
static java.lang.String |
USER_COPROCESSORS_ENABLED_CONF_KEY |
static java.lang.String |
USER_REGION_COPROCESSOR_CONF_KEY |
static java.lang.String |
WAL_COPROCESSOR_CONF_KEY |
Constructor and Description |
---|
CoprocessorHost(Abortable abortable) |
Modifier and Type | Method and Description |
---|---|
protected void |
abortServer(CoprocessorEnvironment environment,
java.lang.Throwable e) |
protected void |
abortServer(java.lang.String coprocessorName,
java.lang.Throwable e) |
abstract E |
createEnvironment(java.lang.Class<?> implClass,
Coprocessor instance,
int priority,
int sequence,
Configuration conf)
Called when a new Coprocessor class is loaded
|
Coprocessor |
findCoprocessor(java.lang.String className)
Find a coprocessor implementation by class name
|
CoprocessorEnvironment |
findCoprocessorEnvironment(java.lang.String className)
Find a coprocessor environment by class name
|
<T extends Coprocessor> |
findCoprocessors(java.lang.Class<T> cls)
Find list of coprocessors that extend/implement the given class/interface
|
java.util.Set<java.lang.String> |
getCoprocessors()
Used to create a parameter to the HServerLoad constructor so that
HServerLoad can provide information about the coprocessors loaded by this
regionserver.
|
static java.util.Set<java.lang.String> |
getLoadedCoprocessors() |
protected void |
handleCoprocessorThrowable(CoprocessorEnvironment env,
java.lang.Throwable e)
This is used by coprocessor hooks which are declared to throw IOException
(or its subtypes).
|
protected void |
legacyWarning(java.lang.Class<? extends Coprocessor> clazz,
java.lang.String message)
limits the amount of logging to once per coprocessor class.
|
void |
load(java.lang.Class<?> implClass,
int priority,
Configuration conf) |
E |
load(Path path,
java.lang.String className,
int priority,
Configuration conf)
Load a coprocessor implementation into the host
|
E |
loadInstance(java.lang.Class<?> implClass,
int priority,
Configuration conf) |
protected void |
loadSystemCoprocessors(Configuration conf,
java.lang.String confKey)
Load system coprocessors.
|
void |
shutdown(CoprocessorEnvironment e) |
protected static boolean |
useLegacyMethod(java.lang.Class<? extends Coprocessor> clazz,
java.lang.String methodName,
java.lang.Class<?>... parameterTypes)
Used to gracefully handle fallback to deprecated methods when we
evolve coprocessor APIs.
|
public static final java.lang.String REGION_COPROCESSOR_CONF_KEY
public static final java.lang.String REGIONSERVER_COPROCESSOR_CONF_KEY
public static final java.lang.String USER_REGION_COPROCESSOR_CONF_KEY
public static final java.lang.String MASTER_COPROCESSOR_CONF_KEY
public static final java.lang.String WAL_COPROCESSOR_CONF_KEY
public static final java.lang.String ABORT_ON_ERROR_KEY
public static final boolean DEFAULT_ABORT_ON_ERROR
public static final java.lang.String COPROCESSORS_ENABLED_CONF_KEY
public static final boolean DEFAULT_COPROCESSORS_ENABLED
public static final java.lang.String USER_COPROCESSORS_ENABLED_CONF_KEY
public static final boolean DEFAULT_USER_COPROCESSORS_ENABLED
protected Abortable abortable
protected java.util.SortedSet<E extends CoprocessorEnvironment> coprocessors
protected Configuration conf
protected java.lang.String pathPrefix
protected java.util.concurrent.atomic.AtomicInteger loadSequence
public CoprocessorHost(Abortable abortable)
public static java.util.Set<java.lang.String> getLoadedCoprocessors()
public java.util.Set<java.lang.String> getCoprocessors()
protected void loadSystemCoprocessors(Configuration conf, java.lang.String confKey)
public E load(Path path, java.lang.String className, int priority, Configuration conf) throws java.io.IOException
path
- path to implementation jarclassName
- the main class namepriority
- chaining priorityconf
- configuration for coprocessorjava.io.IOException
- Exceptionpublic void load(java.lang.Class<?> implClass, int priority, Configuration conf) throws java.io.IOException
implClass
- Implementation classpriority
- priorityconf
- configurationjava.io.IOException
- Exceptionpublic E loadInstance(java.lang.Class<?> implClass, int priority, Configuration conf) throws java.io.IOException
implClass
- Implementation classpriority
- priorityconf
- configurationjava.io.IOException
- Exceptionpublic abstract E createEnvironment(java.lang.Class<?> implClass, Coprocessor instance, int priority, int sequence, Configuration conf)
public void shutdown(CoprocessorEnvironment e)
public Coprocessor findCoprocessor(java.lang.String className)
className
- the class namepublic <T extends Coprocessor> java.util.List<T> findCoprocessors(java.lang.Class<T> cls)
cls
- the class/interface to look forpublic CoprocessorEnvironment findCoprocessorEnvironment(java.lang.String className)
className
- the class nameprotected void abortServer(CoprocessorEnvironment environment, java.lang.Throwable e)
protected void abortServer(java.lang.String coprocessorName, java.lang.Throwable e)
protected void handleCoprocessorThrowable(CoprocessorEnvironment env, java.lang.Throwable e) throws java.io.IOException
env
- Coprocessor Environmente
- Throwable object thrown by coprocessor.java.io.IOException
- Exception@InterfaceAudience.Private protected static boolean useLegacyMethod(java.lang.Class<? extends Coprocessor> clazz, java.lang.String methodName, java.lang.Class<?>... parameterTypes)
legacyWarning(Class, String)
should be used to let operators know.
For examples of this in action, see the implementation of
clazz
- Coprocessor you wish to evaluatemethodName
- the name of the non-deprecated method versionparameterTypes
- the Class of the non-deprecated method's arguments in the order they are
declared.@InterfaceAudience.Private protected void legacyWarning(java.lang.Class<? extends Coprocessor> clazz, java.lang.String message)
useLegacyMethod(Class, String, Class[])
when a runtime issue
prevents properly supporting the legacy version of a coprocessor API.
Since coprocessors can be in tight loops this serves to limit the amount of log spam we create.