Hi Roth,
Thanks for your reply, about the refer to tag, you can see
greeter_async_client2.cpp, my client code is just like it, but the server
code has complex work to do.
Sometimes, ok is false but call->status.ok() is true,
and call->reply.message() is right. That happens very frequent in my
situation, and currently, I ignore it, do not check ok, and the program
working properly, but I worried if there will some undefined things happen.
So that confused me, if the response of the grpc server is correct, why
the ok equals false?
void AsyncCompleteRpc() {
void* got_tag;
bool ok = false;
// Block until the next result is available in the completion queue
"cq".
while (cq_.Next(&got_tag, &ok)) {
// The tag in this example is the memory location of the call
object
AsyncClientCall* call = static_cast<AsyncClientCall*>(got_tag);
// Verify that the request was completed successfully. Note
that "ok"
// corresponds solely to the request for updates introduced by
Finish().
GPR_ASSERT(ok);
if (call->status.ok())
std::cout << "Greeter received: " << call->reply.message()
<< std::endl;
else
std::cout << "RPC failed" << std::endl;
// Once we're complete, deallocate the call object.
delete call;
}
}
在 2017年9月1日星期五 UTC+8下午10:10:25,Mark D. Roth写道:
>
> I'm not sure what you mean when you refer to tag->status and tag->reply.
> The gRPC API does not define a particular API for the tag; that's entirely
> up to your application code, so I have no idea what those fields represent
> or how they are being set.
>
> Yang's earlier description is correct: the ok parameter is an indication
> of whether the operation corresponding to the returned tag was successful.
> What a failure means depends on what the operation was. If it was a
> RequestCall(), then it means that the completion queue is shutting down and
> you can stop listening for new calls. For any request as part of a call
> (e.g., a read or a write), it means that there was a problem with the
> operation and you should call Finish() to get the call's final status.
>
> On Thu, Aug 31, 2017 at 11:30 PM, 谭锦彪 <[email protected] <javascript:>>
> wrote:
>
>> Hi
>>
>> I meet the situation that the Next return true, but ok==false, howerer,
>> the content of the tag is right, tag->status.ok() return true, tag->reply
>> is right too, That confuse me,
>> why would this situation happen? Could I ignore the check of ok?
>>
>> 在 2017年8月2日星期三 UTC+8上午6:57:16,Yang Gao写道:
>>
>>> Usually we have a loop calling Next and when we are sure there will be
>>> no more work adding to the completion queue we call completion queue's
>>> Shutdown method to shutdown the queue.
>>> It will in turn cause the Next to return false and it can be used to
>>> break out of the loop.
>>>
>>> The ok parameter is an indication of the success of that particular
>>> operation and usually is not related to the cq life time management.
>>>
>>>
>>> On Monday, July 10, 2017 at 2:32:37 AM UTC-7, Przemysław Sobala wrote:
>>>>
>>>> Hello
>>>> What is the difference between method's
>>>> bool CompletionQueue::Next(void** tag, bool* ok)
>>>> return value and 2nd parameter's value?
>>>>
>>>> Reading docs, it says:
>>>> /// \param ok[out] true if read a regular event, false otherwise.
>>>> /// \return true if read a regular event, false if the queue is
>>>> shutting down
>>>>
>>>> Following the example:
>>>> while (true) {
>>>> // Block waiting to read the next event from the completion
>>>> queue. The
>>>> // event is uniquely identified by its tag, which in this case is
>>>> the
>>>> // memory address of a CallData instance.
>>>> // The return value of Next should always be checked. This return
>>>> value
>>>> // tells us whether there is any kind of event or cq_ is shutting
>>>> down.
>>>> GPR_ASSERT(cq_->Next(&tag, &ok));
>>>> GPR_ASSERT(ok);
>>>> static_cast<CallData*>(tag)->Proceed();
>>>> }
>>>> it breaks whether the return value or ok parameter is false.
>>>> But in the production environment maybe I can break the loop when the
>>>> queue is shutting down (based on return value) and continue when ok
>>>> parameter's value is false?
>>>> What is the most preferable approach? Should I consider both of them as
>>>> the same and break on false as in the example?
>>>>
>>>> --
>>>> regards
>>>> Przemysław Sobala
>>>>
>>> --
>> 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] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> 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/35ece217-c182-4dd9-b779-bbe8bf6b58d3%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/grpc-io/35ece217-c182-4dd9-b779-bbe8bf6b58d3%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Mark D. Roth <[email protected] <javascript:>>
> Software Engineer
> Google, Inc.
>
--
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/f2d9dbda-9a4a-4283-ab13-0cf57b0547a9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.