BTW, it is still not clear how the status variable changed from 0 to 14 in
this snippet -- any clues?
std::cout << "Checking again: Status= " << status.error_code() << "\n"; //
*status=0 here*
if (cq.Pluck(&ops)) {
std::cout << "cq.Pluck-ops is true, whatever that means.\n"; //This
shows in output
if (!ops.got_message && status.ok()) {
std::cout << __FUNCTION__ << " returning code Unimplemented\n"; //Not
in output
return Status(StatusCode::UNIMPLEMENTED,
"No message returned for unary request");
}
} else {
std::cout << __FUNCTION__ << " assert !status-ok\n"; //Not in output
GPR_CODEGEN_ASSERT(!status.ok());
}
std::cout << "Returning Status= " << status.error_code() << "\n"; //
*status=14! *
On Wednesday, June 7, 2017 at 5:34:53 PM UTC-7, Sundar Nadathur wrote:
>
> Thanks, Makarand. That worked. The client is trying to go through a proxy,
> even though I have configured no_proxy for 127.0.0.1 and the local IP.
> Unsetting http_proxy allowed the client to contact the server.
>
> Now, I need to check why no_proxy did not work.
>
> Regards,
> Sundar
>
> On Wed, Jun 7, 2017 at 4:43 PM, Makarand Dharmapurikar <
> [email protected]> wrote:
>
>> Please run with logging turned on like so:
>> export GRPC_TRACE=all
>> export GRPC_VERBOSITY=DEBUG
>>
>> On Wed, Jun 7, 2017 at 4:40 PM, Sundar Nadathur <[email protected]>
>> wrote:
>>
>>> Hi,
>>> I checked with wireshark as well, by listening on loopback interface
>>> in Linux. I also tried changing to a local IP already configured on an
>>> internal bridge and ran wireshark on that. Nothing comes out of the client.
>>>
>>> After instrumenting the grpc code, I traced it to the grpc function
>>> BlockingUnaryCall(). I instrumented it as below, with the output in
>>> comments
>>> in red. Strangely, the status value changes from 0 to 14, the function
>>> returns 14 and the client code bails out. *What am I missing?*
>>>
>>> template <class InputMessage, class OutputMessage>
>>> Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod&
>>> method,
>>> ClientContext* context, const InputMessage&
>>> request,
>>> OutputMessage* result) {
>>> . . .
>>> Status status = ops.SendMessage(request);
>>> std::cout << __FUNCTION__ << ": Error code: " << status.error_code()
>>> << "\n"; //status=0
>>> if (!status.ok()) {
>>> return status;
>>> }
>>> std::cout << "Calling SendInitialMetadata\n"; // NSS
>>> ops.SendInitialMetadata(context->send_initial_metadata_,
>>> context->initial_metadata_flags());
>>> ops.RecvInitialMetadata(context);
>>> ops.RecvMessage(result);
>>> ops.ClientSendClose();
>>> ops.ClientRecvStatus(context, &status);
>>> std::cout << "Called ClientRecvStatus: Status= " <<
>>> status.error_code() << "\n"; //status=0
>>> call.PerformOps(&ops);
>>> std::cout << "Checking again: Status= " << status.error_code() <<
>>> "\n"; // status=0
>>> if (cq.Pluck(&ops)) {
>>> std::cout << "cq.Pluck-ops is true, whatever that means.\n"; //This
>>> shows in output
>>> if (!ops.got_message && status.ok()) {
>>> std::cout << __FUNCTION__ << " returning code Unimplemented\n"; //Not
>>> in output
>>> return Status(StatusCode::UNIMPLEMENTED,
>>> "No message returned for unary request");
>>> }
>>> } else {
>>> std::cout << __FUNCTION__ << " assert !status-ok\n"; //Not in output
>>>
>>> GPR_CODEGEN_ASSERT(!status.ok());
>>> }
>>> std::cout << "Returning Status= " << status.error_code() << "\n"; //
>>> status=14!
>>> return status;
>>> }
>>>
>>> Thanks a lot,
>>> Sundar
>>>
>>>
>>> On Wed, Jun 7, 2017 at 7:52 AM, Makarand Dharmapurikar <
>>> [email protected]> wrote:
>>>
>>>> How about check what's happening on the network with wireshark?
>>>>
>>>> On Tue, Jun 6, 2017 at 3:42 PM, <[email protected]> wrote:
>>>>
>>>>> Pardon the newbie question. I am getting started with gRPC, and
>>>>> hitting a basic issue where the client gets an error code for the RPC
>>>>> call:
>>>>> Error code: 14 Err msg: Endpoint read failed
>>>>>
>>>>> TL;DR Server starts fine. Netstat shows it is listening on the port.
>>>>> Client fails to connect to netcat on same address as well.
>>>>>
>>>>> The service is very simple:
>>>>> <snip>
>>>>> syntax = "proto3";
>>>>>
>>>>> service MySvc { // name edited
>>>>> rpc GetVersion(Version) returns (Version) {}
>>>>> }
>>>>>
>>>>> message Version {
>>>>> int32 version = 1;
>>>>> }
>>>>> </snip>
>>>>>
>>>>> The compilation succeeds with g++ 4.8.5 and "-Wall". The server
>>>>> starts up fine and prints:
>>>>> <snip>
>>>>> I0606 16:17:24.415181976 4792 server_builder.cc:247]
>>>>> Synchronous server. Num CQs: 1, Min pollers: 1, Max Pollers: 2147483647,
>>>>> CQ
>>>>> timeout (msec): 1000
>>>>> Server listening on 127.0.0.1:50051
>>>>> </snip>
>>>>>
>>>>> The command 'netstat -tulpn | grep ...' shows that the server is
>>>>> listening:
>>>>> tcp6 0 0 127.0.0.1:50051 :::*
>>>>> LISTEN 4792/./<service-name>
>>>>>
>>>>> I also ran 'nc -l 127.0.0.1 50051' and executed the client binary. The
>>>>> netcat got nothing. So, the issue seems be on the client side.
>>>>>
>>>>> Here is my client code:
>>>>> <snip>
>>>>> class MySvcClient {
>>>>> public:
>>>>> MySvcClient(std::shared_ptr<Channel> channel)
>>>>> : stub_(MySvc::NewStub(channel)) {}
>>>>>
>>>>> int GetServerVersion(int version) {
>>>>> Version client_version, server_version;
>>>>> ClientContext ctx;
>>>>>
>>>>> client_version.set_version(version);
>>>>> Status status = stub_->GetVersion(&ctx, client_version,
>>>>> &server_version);
>>>>>
>>>>> cout << "Error code: " << status.error_code();
>>>>> cout << " Err msg: " << status.error_message() << endl;
>>>>>
>>>>> if (status.ok()) {
>>>>> cout << "Server version: " << server_version.version() <<
>>>>> endl;
>>>>> return server_version.version();
>>>>> } else {
>>>>> cout << "Failed to get Server version: " << endl;
>>>>> return -1;
>>>>> }
>>>>> }
>>>>>
>>>>> private:
>>>>> unique_ptr<MySvc::Stub> stub_;
>>>>> };
>>>>>
>>>>> int main(int argc, char** argv) {
>>>>> MySvcClient client(grpc::CreateChannel(
>>>>> "127.0.0.1:50051", grpc::InsecureChannelCredentials()));
>>>>> int myversion = 2;
>>>>> int server_version = client.GetServerVersion(myversion);
>>>>> cout << "Server version: " << server_version << endl;
>>>>>
>>>>> return 0;
>>>>> }
>>>>> </snip>
>>>>>
>>>>> --
>>>>> 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/c9a2c89e-ff6a-4f78-9949-2e626bfa36bc%40googlegroups.com
>>>>>
>>>>> <https://groups.google.com/d/msgid/grpc-io/c9a2c89e-ff6a-4f78-9949-2e626bfa36bc%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>
>>
>
--
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/236aa2a0-064f-4646-8b39-91f41f1cc96b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.