Hi there,
Wanted to give a detailed reply to this question (though a bit late) since it has come up numerous times. This is for the C++ API.
Server-side request an RPC: ok indicates that the RPC has indeed been started. If it is false, the server has been Shutdown before this particular call got matched to an incoming RPC. This is actually the case that you were interested in, but I've gone ahead and documented the other cases below.
Client-side start an RPC: ok indicates that the RPC is going to go to the wire. If it is false, it not going to the wire. This would happen if the channel is either permanently broken or transiently broken but with the fail-fast option.
Client-side Write, Client-side WritesDone, Server-side Write, Server-side Finish, Server-side SendInitialMetadata (which is typically included in Write or Finish when not done explicitly): ok means that the data/metadata/status/etc is going to go to the wire. If it is false, it not going to the wire because the call is already dead (i.e., canceled, deadline expired, other side dropped the channel, etc).
Client-side Read, Server-side Read, Client-side RecvInitialMetadata (which is typically included in Read if not done explicitly): ok indicates whether there is a valid message that got read. If not, you know that there are certainly no more messages that can ever be read from this stream.
Client-side Finish: ok should always be true
Server-side AsyncNotifyWhenDone: ok should always be true
HTH!
- Vijay