If we get a full incoming buffer, we'll issue a read with max_recv_bytes==0, deadlocking the flow control code.
Instead, hold off on advertising reading until the buffer gets a little more clear, then start pulling.
- Removing service_accounts credentials. These credentials just have
drawbacks compared to service_account_jwt_access credentials, notably
in terms for security.
- Renaming Google specific credentials with a Google prefix for C and
C++. This should be done as well for wrapped languages.
(1) In grpc._links.service._Kernel.add_ticket, premetadata() the call
if it has not already been premetadataed for any non-None ticket
termination, not just links.Ticket.Termination.COMPLETION.
(2) In grpc.framework.core._reception, add an entry to
_REMOTE_TICKET_TERMINATION_TO_LOCAL_OUTCOME for REMOTE_FAILURE.
REMOTE_FAILURE on a received ticket indicates the remote side of the
operation blaming the local side for operation abortion.
(3) In grpc.framework.core._reception.ReceptionManager._abort, only
abort the operation's other managers if the operation has not already
terminated, as indicated by the "outcome" attribute of the
TerminationManager.
(4) In grpc.framework.core._reception.ReceptionManager._abort, don't
transmit the outcome to the other side of the operation. Either it came
from the other side in the first place and to send it back would be
telling the other side something it already knows, or it arose from a
network failure and there's no confidence that it would reach the other
side.