Javadoc
This is used by coprocessor hooks which are declared to throw IOException
(or its subtypes). For such hooks, we should handle throwable objects
depending on the Throwable's type. Those which are instances of
IOException should be passed on to the client. This is in conformance with
the HBase idiom regarding IOException: that it represents a circumstance
that should be passed along to the client for its own handling. For
example, a coprocessor that implements access controls would throw a
subclass of IOException, such as AccessDeniedException, in its preGet()
method to prevent an unauthorized client's performing a Get on a particular
table.