@Override
  synchronized public ForeignException getException() {
    return exception;
  }
The dispatcher acts as the state holding entity for foreign error handling. The first exception
received by the dispatcher get passed directly to the listeners. Subsequent exceptions are
dropped.
<p>
If there are multiple dispatchers that are all in the same foreign exception monitoring group,
ideally all these monitors are "peers" -- any error on one dispatcher should get propagated to
all others (via rpc, or some other mechanism). Due to racing error conditions the exact reason
for failure may be different on different peers, but the fact that they are in error state should
eventually hold on all.
<p>
This is thread-safe and must be because this is expected to be used to propagate exceptions from
foreign threads.
hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java