Re: [grpc-io] Re: Sending pickle object as client request

2020-09-23 Thread Russell Wu
It seems to me that on the server when the `loads` trys to restore the
Python object Get_Hash it cannot find it. Because for classes, pickle
doesn't serialize its implementation but its import path (in this case
`main.Get_Hash` if you run client.py directly). I suggest you put a
try...except clause around the logic in Get_Data handler and print it

On Thu, Sep 24, 2020 at 2:00 PM Jatin Sharma  wrote:

> Hi Russell,
> Please find below the code for server.
>
> import grpc
> from concurrent import futures
> import time
> import pickle
>
> import pandas as pd
> import serverdata_pb2
> import serverdata_pb2_grpc
>
> def get_df():
> cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi
> A4'],
> 'Price': [22000,25000,27000,35000]
> }
>
> df = pd.DataFrame(cars, columns = ['Brand', 'Price'])
> return df
>
> class DataProviderServicer(serverdata_pb2_grpc.DataProviderServicer):
> def Get_Data(self,request,context):
> get_func = pickle.loads(request.client_class)
> a = get_func()
> df = get_df()
> ans = a.get_hash(df)
> response = serverdata_pb2.result()
> response.result = ans
> return response
>
> server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
>
> serverdata_pb2_grpc.add_DataProviderServicer_to_server(
> DataProviderServicer(), server)
>
> print('Starting server. Listening on port 50051.')
> server.add_insecure_port('[::]:50051')
> server.start()
>
> try:
> while True:
> time.sleep(86400)
> except KeyboardInterrupt:
> server.stop(0)
>
> On Thu, Sep 24, 2020 at 9:04 AM Russell Wu  wrote:
>
>> Please also post the log on the server side. It does look like some error
>> happened in Get_Data handler on the server. Maybe mismatch of generated
>> client_class code between client and server?
>>
>> On Thu, Sep 24, 2020 at 11:11 AM Jatin Sharma 
>> wrote:
>>
>>> I don't understand the handle terminology. Can you please explain what
>>> you mean by handle. Thanks.
>>>
>>> On Wednesday, September 23, 2020 at 11:08:35 PM UTC+5:30
>>> rbel...@google.com wrote:
>>>
 I would expect there to be more to the error message than just
 "client_class". I'm assuming there's an indentation problem in your
 original post and that the instantiation of the "client_class" message is
 happening within the Get_Data handler. What happens if you try to
 instantiate a "client_class" outside of the handler, on the main thread. Do
 you get a more illuminating error message?
 On Wednesday, September 23, 2020 at 9:20:45 AM UTC-4 Jatin Sharma wrote:

> I want to send a class to the grpc server. So, I am pickling the class
> and sharing as a bytes format in the message.
> The .proto file(serverdata.proto) looks like below:
>
> syntax = "proto3";
>
> service DataProvider{
> rpc Get_Data(client_class) returns (result);
> }
>
> message client_class{
> bytes class_str = 1;
> }
>
> message result{
> int64 res = 1;
> }
>
> client.py file looks like below:
>
> import grpc
> import serverdata_pb2
> import serverdata_pb2_grpc
> import pickle
> import pandas as pd
>
>
> class Get_Hash():
> def get_hash(self,df):
> return pd.util.hash_pandas_object(df).sum()
>
> a = serverdata_pb2.client_class()
> a.class_str = pickle.dumps(Get_Hash)
>
> channel = grpc.insecure_channel('localhost:50051')
> # create a stub (client)
> stub = serverdata_pb2_grpc.DataProviderStub(channel)
> response = stub.Get_Data(a)
>
> print(response.res)
>
> On running this client, I'm getting the following error:
>
> Traceback (most recent call last):
>   File "client.py", line 18, in 
> response = stub.Get_Data(a)
>   File
> "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
> 826, in __call__
> return _end_unary_response_blocking(state, call, False, None)
>   File
> "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
> 729, in _end_unary_response_blocking
> raise _InactiveRpcError(state)
> grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that
> terminated with:
> status = StatusCode.UNKNOWN
> details = "Exception calling application: client_class"
> debug_error_string =
> "{"created":"@1600867086.557068214","description":"Error received from 
> peer
> ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
> calling application: client_class","grpc_status":2}"
> >
>
> I'm unable to resolve this error. I checked the type of the pickle
> file. It was 'bytes'. So, I changed the type in the .proto file to bytes.
> I'd be grateful if someone can help me resolve this error.
>
> Regards,
> Jatin
>
>
>

Re: [grpc-io] Re: Sending pickle object as client request

2020-09-23 Thread Jatin Sharma
Hi Russell,
Please find below the code for server.

import grpc
from concurrent import futures
import time
import pickle

import pandas as pd
import serverdata_pb2
import serverdata_pb2_grpc

def get_df():
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi
A4'],
'Price': [22000,25000,27000,35000]
}

df = pd.DataFrame(cars, columns = ['Brand', 'Price'])
return df

class DataProviderServicer(serverdata_pb2_grpc.DataProviderServicer):
def Get_Data(self,request,context):
get_func = pickle.loads(request.client_class)
a = get_func()
df = get_df()
ans = a.get_hash(df)
response = serverdata_pb2.result()
response.result = ans
return response

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

serverdata_pb2_grpc.add_DataProviderServicer_to_server(
DataProviderServicer(), server)

print('Starting server. Listening on port 50051.')
server.add_insecure_port('[::]:50051')
server.start()

try:
while True:
time.sleep(86400)
except KeyboardInterrupt:
server.stop(0)

On Thu, Sep 24, 2020 at 9:04 AM Russell Wu  wrote:

> Please also post the log on the server side. It does look like some error
> happened in Get_Data handler on the server. Maybe mismatch of generated
> client_class code between client and server?
>
> On Thu, Sep 24, 2020 at 11:11 AM Jatin Sharma 
> wrote:
>
>> I don't understand the handle terminology. Can you please explain what
>> you mean by handle. Thanks.
>>
>> On Wednesday, September 23, 2020 at 11:08:35 PM UTC+5:30
>> rbel...@google.com wrote:
>>
>>> I would expect there to be more to the error message than just
>>> "client_class". I'm assuming there's an indentation problem in your
>>> original post and that the instantiation of the "client_class" message is
>>> happening within the Get_Data handler. What happens if you try to
>>> instantiate a "client_class" outside of the handler, on the main thread. Do
>>> you get a more illuminating error message?
>>> On Wednesday, September 23, 2020 at 9:20:45 AM UTC-4 Jatin Sharma wrote:
>>>
 I want to send a class to the grpc server. So, I am pickling the class
 and sharing as a bytes format in the message.
 The .proto file(serverdata.proto) looks like below:

 syntax = "proto3";

 service DataProvider{
 rpc Get_Data(client_class) returns (result);
 }

 message client_class{
 bytes class_str = 1;
 }

 message result{
 int64 res = 1;
 }

 client.py file looks like below:

 import grpc
 import serverdata_pb2
 import serverdata_pb2_grpc
 import pickle
 import pandas as pd


 class Get_Hash():
 def get_hash(self,df):
 return pd.util.hash_pandas_object(df).sum()

 a = serverdata_pb2.client_class()
 a.class_str = pickle.dumps(Get_Hash)

 channel = grpc.insecure_channel('localhost:50051')
 # create a stub (client)
 stub = serverdata_pb2_grpc.DataProviderStub(channel)
 response = stub.Get_Data(a)

 print(response.res)

 On running this client, I'm getting the following error:

 Traceback (most recent call last):
   File "client.py", line 18, in 
 response = stub.Get_Data(a)
   File
 "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
 826, in __call__
 return _end_unary_response_blocking(state, call, False, None)
   File
 "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
 729, in _end_unary_response_blocking
 raise _InactiveRpcError(state)
 grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that
 terminated with:
 status = StatusCode.UNKNOWN
 details = "Exception calling application: client_class"
 debug_error_string =
 "{"created":"@1600867086.557068214","description":"Error received from peer
 ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
 calling application: client_class","grpc_status":2}"
 >

 I'm unable to resolve this error. I checked the type of the pickle
 file. It was 'bytes'. So, I changed the type in the .proto file to bytes.
 I'd be grateful if someone can help me resolve this error.

 Regards,
 Jatin




 --
>> 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 grpc-io+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/grpc-io/65656b59-cc4d-40d7-a00f-eef9b8f785ecn%40googlegroups.com
>> 
>> .
>>
>

-- 
You received this message because you are subscribed 

Re: [grpc-io] Re: Sending pickle object as client request

2020-09-23 Thread Russell Wu
Please also post the log on the server side. It does look like some error
happened in Get_Data handler on the server. Maybe mismatch of generated
client_class code between client and server?

On Thu, Sep 24, 2020 at 11:11 AM Jatin Sharma  wrote:

> I don't understand the handle terminology. Can you please explain what you
> mean by handle. Thanks.
>
> On Wednesday, September 23, 2020 at 11:08:35 PM UTC+5:30
> rbel...@google.com wrote:
>
>> I would expect there to be more to the error message than just
>> "client_class". I'm assuming there's an indentation problem in your
>> original post and that the instantiation of the "client_class" message is
>> happening within the Get_Data handler. What happens if you try to
>> instantiate a "client_class" outside of the handler, on the main thread. Do
>> you get a more illuminating error message?
>> On Wednesday, September 23, 2020 at 9:20:45 AM UTC-4 Jatin Sharma wrote:
>>
>>> I want to send a class to the grpc server. So, I am pickling the class
>>> and sharing as a bytes format in the message.
>>> The .proto file(serverdata.proto) looks like below:
>>>
>>> syntax = "proto3";
>>>
>>> service DataProvider{
>>> rpc Get_Data(client_class) returns (result);
>>> }
>>>
>>> message client_class{
>>> bytes class_str = 1;
>>> }
>>>
>>> message result{
>>> int64 res = 1;
>>> }
>>>
>>> client.py file looks like below:
>>>
>>> import grpc
>>> import serverdata_pb2
>>> import serverdata_pb2_grpc
>>> import pickle
>>> import pandas as pd
>>>
>>>
>>> class Get_Hash():
>>> def get_hash(self,df):
>>> return pd.util.hash_pandas_object(df).sum()
>>>
>>> a = serverdata_pb2.client_class()
>>> a.class_str = pickle.dumps(Get_Hash)
>>>
>>> channel = grpc.insecure_channel('localhost:50051')
>>> # create a stub (client)
>>> stub = serverdata_pb2_grpc.DataProviderStub(channel)
>>> response = stub.Get_Data(a)
>>>
>>> print(response.res)
>>>
>>> On running this client, I'm getting the following error:
>>>
>>> Traceback (most recent call last):
>>>   File "client.py", line 18, in 
>>> response = stub.Get_Data(a)
>>>   File
>>> "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
>>> 826, in __call__
>>> return _end_unary_response_blocking(state, call, False, None)
>>>   File
>>> "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", line
>>> 729, in _end_unary_response_blocking
>>> raise _InactiveRpcError(state)
>>> grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that
>>> terminated with:
>>> status = StatusCode.UNKNOWN
>>> details = "Exception calling application: client_class"
>>> debug_error_string =
>>> "{"created":"@1600867086.557068214","description":"Error received from peer
>>> ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
>>> calling application: client_class","grpc_status":2}"
>>> >
>>>
>>> I'm unable to resolve this error. I checked the type of the pickle file.
>>> It was 'bytes'. So, I changed the type in the .proto file to bytes. I'd be
>>> grateful if someone can help me resolve this error.
>>>
>>> Regards,
>>> Jatin
>>>
>>>
>>>
>>>
>>> --
> 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 grpc-io+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/grpc-io/65656b59-cc4d-40d7-a00f-eef9b8f785ecn%40googlegroups.com
> 
> .
>

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAABt8Y-bc-HO7amngEAkhJKC%2BGvUyUunUU-Pb6NkdqpDuBeRhg%40mail.gmail.com.


[grpc-io] Re: Sending pickle object as client request

2020-09-23 Thread Jatin Sharma
I don't understand the handle terminology. Can you please explain what you 
mean by handle. Thanks.

On Wednesday, September 23, 2020 at 11:08:35 PM UTC+5:30 rbel...@google.com 
wrote:

> I would expect there to be more to the error message than just 
> "client_class". I'm assuming there's an indentation problem in your 
> original post and that the instantiation of the "client_class" message is 
> happening within the Get_Data handler. What happens if you try to 
> instantiate a "client_class" outside of the handler, on the main thread. Do 
> you get a more illuminating error message?
> On Wednesday, September 23, 2020 at 9:20:45 AM UTC-4 Jatin Sharma wrote:
>
>> I want to send a class to the grpc server. So, I am pickling the class 
>> and sharing as a bytes format in the message.
>> The .proto file(serverdata.proto) looks like below:
>>
>> syntax = "proto3";
>>
>> service DataProvider{
>> rpc Get_Data(client_class) returns (result);
>> }
>>
>> message client_class{
>> bytes class_str = 1;
>> }
>>
>> message result{
>> int64 res = 1;
>> }
>>
>> client.py file looks like below:
>>
>> import grpc
>> import serverdata_pb2
>> import serverdata_pb2_grpc
>> import pickle
>> import pandas as pd
>>
>>
>> class Get_Hash():
>> def get_hash(self,df):
>> return pd.util.hash_pandas_object(df).sum()
>> 
>> a = serverdata_pb2.client_class()
>> a.class_str = pickle.dumps(Get_Hash)
>>
>> channel = grpc.insecure_channel('localhost:50051')
>> # create a stub (client)
>> stub = serverdata_pb2_grpc.DataProviderStub(channel)
>> response = stub.Get_Data(a)
>>
>> print(response.res)
>>
>> On running this client, I'm getting the following error:
>>
>> Traceback (most recent call last):
>>   File "client.py", line 18, in 
>> response = stub.Get_Data(a)
>>   File "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", 
>> line 826, in __call__
>> return _end_unary_response_blocking(state, call, False, None)
>>   File "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", 
>> line 729, in _end_unary_response_blocking
>> raise _InactiveRpcError(state)
>> grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that 
>> terminated with:
>> status = StatusCode.UNKNOWN
>> details = "Exception calling application: client_class"
>> debug_error_string = 
>> "{"created":"@1600867086.557068214","description":"Error received from peer 
>> ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
>>  
>> calling application: client_class","grpc_status":2}"
>> >
>>
>> I'm unable to resolve this error. I checked the type of the pickle file. 
>> It was 'bytes'. So, I changed the type in the .proto file to bytes. I'd be 
>> grateful if someone can help me resolve this error.
>>
>> Regards,
>> Jatin
>>
>>
>>
>>
>>

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/65656b59-cc4d-40d7-a00f-eef9b8f785ecn%40googlegroups.com.


Re: [grpc-io] Aggregation/Parallel Asynchronous Calling

2020-09-23 Thread 'Michael Lumish' via grpc.io
What you are describing is a normal thing to do with gRPC, using either
unary or streaming methods. Each of those operations is independent and can
be started independently, and then when they finish you can aggregate the
results. The exact way to do this depends on what features the specific
programming language has for handling asynchronous operations. What
language do you expect to do this in?

On Mon, Sep 21, 2020 at 5:54 AM Nicholas Bunn 
wrote:

> Hi there, I'm developing an application which will aggregate information
> from various services and return it to the client. The system will be
> distributed and I'd like to implement asynchronous communication where
> possible to avoid lengthy processes stalling the system.
>
> I think I understand the "asynchronous" implementation of gRPC in terms of
> streaming, where it's asynchronous considering that you don't necessarily
> wait for the invoked service to complete its process before getting a
> response. I'm looking for the non-blocking aspects of asynchronous
> communication, so considering the explanation below - I hope someone can
> provide some insight for me.
>
> Say there exists some aggregating service and four other services from
> which it will be collecting information (services A, B, C, and D). With
> standard synchronous calls, the aggregating service would have to query
> service A, wait for a response, then query service B, wait for a response,
> and so on. What I am looking for is a way to query all four services in
> parallel and wait for a callback or notification from each one once they
> have completed their process, and their information is available. Would one
> be able to achieve this with streaming? Or is the client still limited to
> communication with one server at a time (essentially implementing a
> blocking call)?
>
> Any assistance/insight would be greatly appreciated!
>
> Thanks,
> Nic
>
> --
> 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 grpc-io+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/grpc-io/bc93f296-f129-4f23-a4a7-d76e820d28a5n%40googlegroups.com
> 
> .
>

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAPK2-4fCAefGsZHfbdog2rN_i6N7fLD_RgNz1n_krd2QA%3DfTYQ%40mail.gmail.com.


[grpc-io] Re: Sending pickle object as client request

2020-09-23 Thread 'Richard Belleville' via grpc.io
I would expect there to be more to the error message than just 
"client_class". I'm assuming there's an indentation problem in your 
original post and that the instantiation of the "client_class" message is 
happening within the Get_Data handler. What happens if you try to 
instantiate a "client_class" outside of the handler, on the main thread. Do 
you get a more illuminating error message?
On Wednesday, September 23, 2020 at 9:20:45 AM UTC-4 Jatin Sharma wrote:

> I want to send a class to the grpc server. So, I am pickling the class and 
> sharing as a bytes format in the message.
> The .proto file(serverdata.proto) looks like below:
>
> syntax = "proto3";
>
> service DataProvider{
> rpc Get_Data(client_class) returns (result);
> }
>
> message client_class{
> bytes class_str = 1;
> }
>
> message result{
> int64 res = 1;
> }
>
> client.py file looks like below:
>
> import grpc
> import serverdata_pb2
> import serverdata_pb2_grpc
> import pickle
> import pandas as pd
>
>
> class Get_Hash():
> def get_hash(self,df):
> return pd.util.hash_pandas_object(df).sum()
> 
> a = serverdata_pb2.client_class()
> a.class_str = pickle.dumps(Get_Hash)
>
> channel = grpc.insecure_channel('localhost:50051')
> # create a stub (client)
> stub = serverdata_pb2_grpc.DataProviderStub(channel)
> response = stub.Get_Data(a)
>
> print(response.res)
>
> On running this client, I'm getting the following error:
>
> Traceback (most recent call last):
>   File "client.py", line 18, in 
> response = stub.Get_Data(a)
>   File "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", 
> line 826, in __call__
> return _end_unary_response_blocking(state, call, False, None)
>   File "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", 
> line 729, in _end_unary_response_blocking
> raise _InactiveRpcError(state)
> grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated 
> with:
> status = StatusCode.UNKNOWN
> details = "Exception calling application: client_class"
> debug_error_string = 
> "{"created":"@1600867086.557068214","description":"Error received from peer 
> ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
>  
> calling application: client_class","grpc_status":2}"
> >
>
> I'm unable to resolve this error. I checked the type of the pickle file. 
> It was 'bytes'. So, I changed the type in the .proto file to bytes. I'd be 
> grateful if someone can help me resolve this error.
>
> Regards,
> Jatin
>
>
>
>
>

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/94820718-28c9-4238-bbf9-9169f7448a52n%40googlegroups.com.


[grpc-io] Sending pickle object as client request

2020-09-23 Thread Jatin Sharma
I want to send a class to the grpc server. So, I am pickling the class and 
sharing as a bytes format in the message.
The .proto file(serverdata.proto) looks like below:

syntax = "proto3";

service DataProvider{
rpc Get_Data(client_class) returns (result);
}

message client_class{
bytes class_str = 1;
}

message result{
int64 res = 1;
}

client.py file looks like below:

import grpc
import serverdata_pb2
import serverdata_pb2_grpc
import pickle
import pandas as pd


class Get_Hash():
def get_hash(self,df):
return pd.util.hash_pandas_object(df).sum()

a = serverdata_pb2.client_class()
a.class_str = pickle.dumps(Get_Hash)

channel = grpc.insecure_channel('localhost:50051')
# create a stub (client)
stub = serverdata_pb2_grpc.DataProviderStub(channel)
response = stub.Get_Data(a)

print(response.res)

On running this client, I'm getting the following error:

Traceback (most recent call last):
  File "client.py", line 18, in 
response = stub.Get_Data(a)
  File "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", 
line 826, in __call__
return _end_unary_response_blocking(state, call, False, None)
  File "/home/jatin/.local/lib/python3.8/site-packages/grpc/_channel.py", 
line 729, in _end_unary_response_blocking
raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated 
with:
status = StatusCode.UNKNOWN
details = "Exception calling application: client_class"
debug_error_string = 
"{"created":"@1600867086.557068214","description":"Error received from peer 
ipv6:[::1]:50051","file":"src/core/lib/surface/call.cc","file_line":1061,"grpc_message":"Exception
 
calling application: client_class","grpc_status":2}"
>

I'm unable to resolve this error. I checked the type of the pickle file. It 
was 'bytes'. So, I changed the type in the .proto file to bytes. I'd be 
grateful if someone can help me resolve this error.

Regards,
Jatin




-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/6d5abb5a-a16e-4b11-9a1d-2532b299cdcbn%40googlegroups.com.