Open jhump opened 5 months ago
Errors during deserialization (which includes the decompression here) are currently treated as application errors. We don't want to expose StatusRuntimeExceptions thrown by the client to the server's own clients, as that could leak server implementation details. So we close the call with a unique-but-not-very-helpful error and then log locally (via the thread's UncaughtExceptionHandler) for the full details.
It does seem it should be safe to consider errors from the marshaller specially, and report those errors back to the client (and not log). There is some difficulty here as ServerCallImpl will know the source of the exception, but ServerImpl.ServerStreamListenerImpl is the one that handles it. But probably not too bad.
Any update on when we can expect this change?
Is it causing you a problem? Nobody is working on this.
One of our users reached out to us about this causing some frustration for them. It's not an urgent problem, but they were bothered enough by it that they bumped their message size limit extremely high so that they can manually report the error with the correct status and avoid the logs, so I figured I'd check if work was underway.
When the client uses “gzip” compression to compress requests, if it sends a message where the compressed size is acceptable (less than or equal to the server’s configured max) but the uncompressed size is too large, the client receives an unhelpful UNKNOWN error with a message of “Application error processing RPC”.
Interestingly, an error is logged with an exception that indicates the expected/correct error code. It’s not a warning but an error with a message that implies the exception was never caught: