Description
If an unexpected exception occurs when deserialization occurs for a custom filter, the exception gets wrapped in a DeserializationException. Since this exception is in turn wrapped in an IOException, the many loop retry logic kicks in. The net effect is that this same deserialization error occurs again and again as the retries occur, just causing the client to wait needlessly.
IMO, either the parseFrom methods should be allowed to throw whatever type of IOException they'd like, in which case they could throw a DoNotRetryIOException, or a DeserializationException should be wrapped in a DoNotRetryIOException.