We have a ServerInterceptor for logging every call our grpc-java server receives. It wraps the ServerCall passed on to next::startCall with a SimpleForwardingServerCall that overrides close(Status,Metadata) for logging the status of the call and tracking total time elapsed between interceptCall and close. We expected this to result in logging status and tracking elapsed time for every call received.
We've found one case in production where our interceptor logged in the body of interceptCall, and then an inner interceptor did some logging in its interceptCall, but we never saw any more logging for the request. Other context suggests that there were connection issues between the client and server at the time.
Should ServerCall::close(Status,Metadata) be called for every call, regardless of client or connection misbehavior? If not, is there some other callback that we may have missed that would indicate that a call has died?