streaming API. In particular, Finish should not be called until the client
is sure that there is no more message to be read (as documented in
the comments for ClientStreamingInterface::Finish)
Specifically:
Receiving trailing and initial metadata had to be published in
lock-step.
=> If we wanted trailing metadata, we might not get initial metadata processed
until messages arrived.
=> Compression code had no idea what codec to use.
To fix it, publish initial metadata as soon as it's ready (this is a
transport API change).
Requires changes to grpc_call to ensure ordering in processing initial
metadata and messages (one may be delayed).
Exposed at least some bugs in C++ where we never read initial metadata.
I expect at least one more similar bug.
- end2end test deadlines may complete before checking IsCancelled
=> don't expect it to be false in these cases
- add exponential backoff to port_posix
- ensure run_tests rebuilds targets with a regex I commonly use
for now. This will increase our coverage of concurrent execution cases in C++
since we don't currently have any coverage for multithreaded async execution using
a common completion queue.
In this test, 100 client threads initiate 1000 RPCs each, then join, and then
100 client threads come along to proces those RPC completion events as they come back.