@Override
  public void run() {
    Span span = TraceUtil.getGlobalTracer().spanBuilder(getClass().getSimpleName())
      .setParent(Context.current().with(parent)).startSpan();
    // assume that this is the top of an execution on a new or reused thread, that we're safe to
    // blast any existing MDC state.
    try (Scope scope = span.makeCurrent()) {
      MDC.put("event_type", eventType.toString());
      process();
    } catch (Throwable t) {
      handleException(t);
    } finally {
      span.end();
      MDC.clear();
    }
  }
Event handlers should do all the necessary checks in this method (rather than in the
constructor, or in process()) so that the caller, which is mostly executed in the ipc context
can fail fast. Process is executed async from the client ipc, so this method gives a quick
chance to do some basic checks. Should be called after constructing the EventHandler, and
before process().
@return the instance of this class
@throws Exception when something goes wrong
hbase-server/src/main/java/org/apache/hadoop/hbase/executor/EventHandler.java