Details
Description
On each regionserver our coprocs keep a cache of HConnections with custom settings (such as short timeouts) for talking to other regionservers. They're used when coprocs need to make RPCs, such as during index rebuilds.
When a regionserver is closed, these HConnections are closed as well. However, we've seen in our test pipelines a race condition where we may have just given out one of the HConnections to a coprocessor, only to have the connection closed just before it's used.
This will produce an IllegalArgumentException from the HBase Table object, which (if the index rebuild was caused by a client Scan) will be thrown back to the client as a DoNotRetryIOException.
In this case we want the client exception to be a normal retriable IOException, because if they try again after the region comes up again somewhere else, the Scan will likely succeed.