Hello, 

I would like to know what is the proper usage of grpc::ClientAsyncReader  
with a server side stream.  We use older version of grpc library - 1.16.0 
on Debian Stretch.
After I create the reader, I use the grpc::ClientAsyncReader::StartCall() 
method.
I am not quite sure when I should issue the 
grpc::ClientAsyncReader::Finish() and if the returned status should be 
checked in case we receive many replies using server side stream.
And, I would like to know, under which circumstances it makes sense to 
use/shoudl be used ReadInitialMetadata() method.
I tried to issue it right after StartCall() and also before first Read(), 
but in both cases I get some assertions :

After Start: 12160 channel_cc.cc:160]          assertion failed: 
GRPC_CALL_OK == grpc_call_start_batch(call->call(), cops, nops, 
ops->cq_tag(), nullptr)

 After Finish: 12327 async_stream.h:230]         assertion failed: 
!context_->initial_metadata_received_

Here a simplified version of the code I use:

  grpc::CompletionQueue cq;
  grpc::ClientContext context;
  StartStreamingRequest request;
  StreamingNotification reply;
  
  std::unique_ptr< grpc::ClientAsyncReader<StreamingNotification> >
      async_reader( stub_->PrepareAsyncStartStreaming(&context, request, 
&cq) );  


  void *tag = (void*)1234;
  async_reader->StartCall(tag);

     // Do I need to perform Finish immediately or should I wait?
  grpc::Status status;
  async_reader->Finish(&status, tag);      


  void *recv_tag = nullptr;
  bool ok = false;
  while(cq.Next(&recv_tag, &ok))
  {

    if (!ok)
      LOG_DEBUG("Completion queue returns nOK");
    if (recv_tag != tag)
      LOG_INFO("Tag does not match expected value" );    
    else
    {
      // Does it make sense to check the status.ok() here, is it necessary ?
      if (status.ok())
      {
        async_reader->Read(&reply, tag);
        ProcessNotification(reply);
      }
    }
  }

Thanks for any explanation or suggestions.
Peter

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/d41f2108-c81e-485d-85d4-882b017bee48n%40googlegroups.com.

Reply via email to