Hi Vijay, thanks for your quick response. It answers part of my question. I still can't find anywhere how should I react to "ok" being false. More specifically, how should I react to `ok` being false after RPC invocation or after client Read. Is the stream then dead and resources are released or should I still call Finish? If it is the former, how should I learn the status in such a case?
Thanks On Tue, Mar 5, 2019 at 10:32 PM 'Vijay Pai' via grpc.io < [email protected]> wrote: > Hi there, > > The detailed comment on "ok" is at > https://github.com/grpc/grpc/blob/master/include/grpcpp/impl/codegen/completion_queue.h#L128-L170 > . Does this answer the questions that you have about its semantics? > > Thanks, > Vijay > > On Tuesday, March 5, 2019 at 11:50:49 AM UTC-8, [email protected] wrote: >> >> Hi, >> I'm trying to find what the proper reaction to ok == false should be in >> asynchronous API with streaming responses. I can't infer it from the >> documentation. >> >> The example in https://grpc.io/docs/tutorials/async/helloasync-cpp.html >> simply does GRP_ASSERT(ok), so I can't infer this from it either. >> >> This is my understanding of the state machine allowing to properly read a >> whole stream of responses (please correct me if I'm wrong). >> >> The stream can be in one of the following states: >> >> - NOT_CREATED (before we touch anything) >> - CREATING (after calling Stub::AsyncFoo(), before >> CompletionQueue::AsyncNext() reports completion) >> - PROCESSING (after calling ClientAsyncReaderInterface<>::Read()) >> - FINISHING (after calling calling >> ClientAsyncReaderInterface<>::Finish(), before >> CompletionQueue::AsyncNext() reports completion) >> - FINISHED (the stream is dead, all resources are freed) >> >> These are the transitions between the states: >> >> State NOT_CREATED: >> >> - Calling Stub::AsyncFoo() transitions to CREATING >> >> State CREATING: >> >> - if CompletionQueue::AsyncNext() sets ok to true, call >> ClientAsyncReaderInterface<>::Read() and transition to PROCESSING; >> (we just got a response, BTW) >> - if CompletionQueue::AsyncNext() sets ok to false, call >> ClientAsyncReaderInterface<>::Finish() transition to FINISHING >> >> State PROCESSING: >> >> - if CompletionQueue::AsyncNext() sets ok to true, call >> ClientAsyncReaderInterface<>::Read() and transition to PROCESSING >> - if CompletionQueue::AsyncNext() sets ok to false, call >> ClientAsyncReaderInterface<>::Finish() and transition to FINISHING >> >> State FINISHING: >> >> - when CompletionQueue::AsyncNext() notifies (it will always set `ok >> == true`) transition to FINISHED; (here we learn if the stream was >> just closed or if there was an error) >> >> State FINISHED: >> >> - nothing else can happen >> >> >> I have a couple of questions: >> >> - Is this a understanding correct? >> - If I wanted to finish the stream in the client, I presume, I can >> call Finish() in CREATING and PROCESSING states, right? >> - Is this the same state machine on the server side or if streaming >> in the other direction? >> >> The reason I'm asking is that I'm getting a grpc assertion when calling >> Finish() >> after having received ok == false in state PROCESSING: >> grpc/src/core/lib/surface/call.cc:1853: grpc_cq_begin_op(call->cq, >> notify_tag) >> >> I'd be grateful for clarification, because I'm currently don't know if >> I'm misusing the library or I have a bug. >> >> Thanks in advance >> > -- > You received this message because you are subscribed to a topic in the > Google Groups "grpc.io" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/grpc-io/pR0iKrnSO44/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/grpc-io. > To view this discussion on the web visit > https://groups.google.com/d/msgid/grpc-io/fc40a380-c482-43da-8e4d-2bb470a4e2c9%40googlegroups.com > <https://groups.google.com/d/msgid/grpc-io/fc40a380-c482-43da-8e4d-2bb470a4e2c9%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Marek Dopiera [email protected] -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/grpc-io. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/CAAo%3DKD0R0adU9ET0dMfmqpTWAQd_CvyEJgzGsTpLFfoSX_10EQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
