Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
Repo info
    Eric Anderson
    If you've called channelBuilder.enableRetries() then it enables the subsystem for the entire channel. That is the most likely culprit. Try removing that enableRetries() call and see if the issue disappears. If it does "resolve" the problem, then it is clearly a bug in the retry code, so please file an issue for us to track down the bug.
    sure, i'll check it tomorrow. thanks!
    hi all, how to generate .d.ts from .proto file
    2 replies
    Bilal Ahmad
    hi all,
    anybody has an example of a custom grpc auth-service preferably in python and how it sits in the k8s for service to service communication e.g. i want a separate auth-service deployed which generates e.g. JWT token by checking username/password and then a service (or interceptor, im not sure) that is in front of every service in cluster maybe that validates the JWT token
    1 reply
    Amandeep Singh Ghai
    Hi all,
    for gRPC(Ruby) can someone point me to a method to add details to a gRPC exception.
    Something similar to https://pkg.go.dev/google.golang.org/grpc/internal/status#Status.WithDetails
    Amandeep Singh Ghai

    I think I found the solution

    field_error = Base::FormErrors::Field.new(name: 'name', error: 'must be unique')
    form_errors = Base::FormErrors.new(fields: [field_error])
    raise GRPC::InvalidArgument.new('Validation Failed', 'grpc-status-details-bin' => form_errors.to_proto)

    I have to use the metadata to pass the details

    Ronny Meeus
    Hi all, I have a question about "void grpc::ServerAsyncWriterInterface< W >::Finish". In the documentation I read: "Should not be used concurrently with other operations". I read also that it can be called when the server wants to end the call "it is desired to end the call early with some non-OK status code". But it can still be that there is a read pending in the queue when the server wants to end the call and that would mean that there is still an operation pending (so concurrent operation). Is it allowed to call Finish with a read pending?
    1 reply
    @murgatroid99 hi
    Hi, I am interested into grpc, but I wonder how it will be implemented in a microservice infrastructure. Usually I use rabbitmq, but how do the microservices know where to send the message?
    1 reply
    Jose Robles

    Hi, Im new to gRPC and have a couple questions that I got from the project I was assigned:

    1. I have this case on MongoDB:

    @Document(collection = "Notebook") data class NotebookModel{
    @id val id: String,
    val name: String,
    val desc:String,
    val noles:List<Notes>,
    val owner:Owner

    the problem is that Owner is a proto generated class, so when I try to list or find elements, Im getting an error:
    "java.lang.IllegalStateException: Cannot set property fields because no setter, no wither and it's not part of the persistence constructor private com.google.protobuf.UnknownFieldSet()!"

    I just want to know if this error is because the class only way to instantiate is with a builder and when Mongo is trying to set the
    object values , it can't

    2 replies
    Sangwon Hong

    Hello. May I ask a question?

    What's the difference between gRPC default executor and gRPC resolver executor?

    4 replies
    Jose Robles
    1. my second question is an odd behavior Im having when Im building a response:

    I have a simmilar code to this one:

    EnumStatus status: 1 ,
    String Message: 2

    func saveNotebook():SaveNoteBookResponse{

    var status:EnumStatus = Status.inprocess
    var message = "in proccess"

    var status= Status.Success
    var message = "Success!"
    var status = Status.Error
    var message = "Ups something went wrong!"

    val response = SaveNoteBookResponse.newBuilder().setStatus(status).setMessage(message).build()
    return message


    for some reason, when I set Status, is not beeing set on the response, instead of having:

    "status": "Success" ,
    "Message": "Success!"

    Im getting :
    "Message": "Success!"

    The same happens when there is an error , the only way I made it work is setting the enum directly when Im building the response:

    val response = SaveNoteBookResponse.newBuilder().setStatus(status.Success).setMessage("message").build()

    Is there a restriction I have with enums? or this may be an issue of kotlin.

    Matt Broadstone
    Can anybody speak to what the "preferred CQ type" is that's mentioned in this code for the C++ server? It seems like there may have been plans at some point to run continuation queues closer to the event manager, but I see that the "AlternativeCQ" is implemented per recommendation (multiple CQ's on a thread pool)
    12 replies
    Alma Maria

    Hello everyone,
    This April 27th, at 2:30 PM PT we are hosting a new gRPC community meetup. Please add this meeting to your calendar http://bit.ly/gRPCAprilMeetup and join us to hear working groups updates and ask any technical questions you may have. We will also show and discuss a demo, "ML Microservices with gRPC and Python", led by Andrej Baranovskij, Founder/Senior Developer at Katana ML.

    Looking forward to seeing most of you this Thursday at our community meetup!

    Mark Hoad
    @AlmaRinasz_twitter Just as a heads up that link isn't working
    Alma Maria
    @mhoad Can you check with this link? https://bit.ly/gRPCAprilMeetup it is working for me.
    Sounds like a permissions issue maybe?
    1 reply
    Sangwon Hong

    Hello. I previously asked a question, what the difference between gRPC default executor and gRPC resolver executor is. But I didn't get any answers, So I ask it again.

    In executor.cc#L401, when InitAll() calls, a pair of executor threads is always generated together.


    But I couldn't find any explanations about ExecutorType.
    And I couldn't find whether two executor threads run different work.

    2 replies
    David Bryson
    hi gRPC friends. I'm curious if anyone has thoughts on having a grpc-java server which handles different synchronous RPCs. I have some of these RPCs which are very quick(<50ms) and some which are longer(150ms). Is there a recommended approach to keep the longer RPCs from tying up threads ? Separate thread pools for different type of request ? Different grpc endpoints for different requests ?
    4 replies
    Arsene Tochemey Gandote
    Hello geeks. Please has anyone encountered such an error rpc error: code = Internal desc = header list size to send violates the maximum size (8192 bytes) set by server
    5 replies
    I am using scalapb-grpc as a library
    Terry Fu
    Hi all, trying to change a legacy GRPC C++ client to use SSL connections. I've put the appropriate certificates into the code, but I'm getting a 14 UNAVAILABLE: Trying to connect an http1.x server error. I've put this c++ code into a fresh project using the same version of GRPC (1.12.0) and it works as expected. Comparing traces between the 2, the legacy project does not output any traces from ssl_transport_security but the fresh one does. This leads me to suspect that the SSL bits of the code is misbehaving in some way. Any help appreciated.
    Hello. Has anyone done vulnerability testing on gRPC endpoints? I need to pass security validation, and in our org we use BURP suite from PortSwigger.net to scan for vulnerabilities. Can gRPC end points be scanned in a similar fashion? In short - what is the recommended way to do vulnerability scanning?
    Alma Maria
    Hello everyone,
    There was an error in the meetup link. The correct link is https://bit.ly/gRPCApril2021Meetup See you April 27th, at 2:30 PM PT For a discussion and a demo, "ML Microservices with gRPC and Python", led by Andrej Baranovskij, Founder/Senior Developer at Katana ML.
    Mgo Imamedjian
    Hello, I'm trying to work with an AuthMetadataProcessor (plain grpc-cpp) and hit the following issue. In the Process handler, there is an AuthContext that is passed. I'm noticing that in some cases, the AuthContext is reused between different calls on what I think are different channels. This means that the properties added with AddProperty are still present when handling what I think is a new call. I would have expected to get a "fresh" AuthContext for each channel (and my hypothesis here is: one new connection = one new channel). Am I misunderstanding something? Thanks.
    4 replies
    Iwan Aucamp
    hi, I'm not entirely sure what the syntax here is: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#call-a-remote-method for request parameters, is it yaml based?
    2 replies
    seems to be
    nifty tool
    Ido David
    Hello, might anyone know how one might ask to have their company mentioned as a user of gRPC technology in https://grpc.io and/or https://grpc.io/about/ :)?
    1 reply
    I was wondering do you people in C++ use first byte to indicate which message type message is?
    1 reply
    Sergi Delgado Segura

    Hi folks, I'm getting an ImportError with grpcio-1.37.0 for arm32 after installing it via PyPI (using grpcio-1.37.0-cp37-cp37m-linux_armv7l.whl).

        import grpc
      File "/usr/lib/python3.7/site-packages/grpc/__init__.py", line 23, in <module>
        from grpc._cython import cygrpc as _cygrpc
    ImportError: cannot import name 'cygrpc' from 'grpc._cython' (/usr/lib/python3.7/site-packages/grpc/_cython/__init__.py)

    I've double checked that grpcio-1.36.0 works fine on the same setup. Any clues about what may be going on? Not sure if this is an already known issue, I'm happy to open one on GitHub otherwise.

    4 replies
    Iwan Aucamp
    hi, the convention for package names seem to be ${org}.some.thing eg. google.some.thing and uber.some.thing - is this established somewhere? I looked at the uber style guide (https://github.com/uber/prototool/blob/dev/style/README.md) and and google naming guide (https://cloud.google.com/apis/design/naming_convention) but neither of them explicitly make this suggestion
    1 reply
    In my view this should be followed to avoid a tragedy of the commons.
    Also, somewhat related, is there some repo of example proto files available somewhere?
    Keith Rosenberg

    Does anyone have any experience with taking a gRPC service implementation and putting it into a DLL, and some of the problems that might arise? I have successfully loaded a DLL that exposes a factory function to instantiate a Service Implementation (grpc::Service, for a PingPong proto w/ Unary request), and then I call builder.RegisterService(&service) successfully, but then I get some segfault on the server when I make the request and end up with an error like this:

    Exception thrown: read access violation.
    **grpc_core::g_static_metadata_slice_ctx** was nullptr.
    Unhandled exception thrown: read access violation.
    **grpc_core::g_static_metadata_slice_ctx** was nullptr.

    And it seems to just go on and on forever at least in debug mode w/ break points. Just curious if this is something others have encountered, I can suspect numerous potential problems:
    1) some kind of issue with the DLL build of generated .protos interacting with the separate grpc-server.exe
    2) DLL doesn't know how to properly access grpc::Server object's (PingPongServiceImplementation class) methods because DLL usage has scrambled them

    Eric Anderson
    gRPC Community Meeting is starting. Link to join and meeting notes at https://bit.ly/grpcmeetings
    José Manuel Ferrete Benítez

    Hi guys!, I'm @jmferrete, very nice to join this community.
    I'm having some trouble with my GRPCLB round_robin configuration. I've defined my insecure_channel like this:

            service_srv_dns_host_entry = "_grpclb._tcp.my.example.srv.entry.com"
            opts = [("grpc.lb_policy_name", "round_robin"),
                    ("grpc.dns_enable_srv_queries", True),
                    ("grpc.max_connection_age_ms", 10000)]
            channel = grpc.insecure_channel(f"dns:///{service_srv_dns_host_entry}", opts)

    And my SRV DNS entry resolves to three different backend DNS type A entries each of them with a different TCP port. Something like this:

    0 0 50003 1.example.a.entry.com.
    0 0 20003 2.example.a.entry.com.
    0 0 30003 3.example.a.entry.com.

    If I use the insecure_channel, I can see this in the logs (extracted with GRPC_VERBOSITY=debug GRPC_TRACE=all):

    I0428 10:54:44.048308771   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: input[0]=
    I0428 10:54:44.048386289   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: output[0]=
    I0428 10:54:44.048410145   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: input[0]=
    I0428 10:54:44.048430944   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: input[1]=
    I0428 10:54:44.048451026   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: input[2]=
    I0428 10:54:44.048536903   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: output[0]=
    I0428 10:54:44.048557022   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: output[1]=
    I0428 10:54:44.048580054   22405 grpc_ares_wrapper.cc:559]   (c-ares resolver) request:0x7f8980005a30 c-ares address sorting: output[2]=
    I0428 10:54:44.049976937   22405 subchannel.cc:1012]         Connect failed: {"created":"@1619600084.049891639","description":"Failed to connect to remote host: Connection refused","errno":111,"file":"src/core/lib/iomgr/tcp_client_posix.cc","file_line":201,"os_error":"Connection refused","syscall":"connect","target_address":"ipv4:"}

    As we can see, it is trying to connect to the default TCP port (443), but we want to avoid it and request directly to the resolved TCP ports (50003, 20003, 30003). Am I missing or misunderstanding something? Thanks in advance.

    5 replies
    Alex Genco
    Hello! Is there a way in the Ruby library to define a ClientInterceptor around an entire server-streaming RPC call? The server_streamer interceptor hook only wraps the initial establishment of the streaming connection, but I want to wrap the entire lifetime of the stream until it is closed.
    Jarkko Peltonen
    Tried to send message with better proto grpc client and my .net grpc server throws exception: "Google.Protobuf.InvalidProtocolBufferException: 'Protocol message contained an invalid tag (zero).'" What could cause this? Using the default code convertor works without errors.
    Arsene Tochemey Gandote
    Hello folks. Please I would like to know what is the best way to pack and unpack Any type in javascript.
    1 reply
    I'm trying to get the python helloworld greeter_server going, the basic problem is that the server process hangs at the call to grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - how can i prove to myself this is a python problem
    4 replies
    i started using grpc-1.36.4 now i'm on grpc-1.37.1 (with grpcio and -tools all from official tarballs) and abseil downgraded to 20200923 (which was needed if i had to avoid undefined symbol errors)
    i'm on the irc client. i dont know if this is working and if i can see what anyone posts...
    Alma Maria
    Hi everyone! I am seeking assistance with a PR. It is to add the the new gRPC Google Calendar to the community tab. The link to the PR is grpc/grpc.io#770 Thank you in advance!
    Daven Du
    Hi folks! I'm using grpc-node and want to know if it's a good idea to have a async/await style load balancer and picker, see grpc/grpc-node#1771
    4 replies
    no luck with the python helloworld example. i've managed to avoid the undefined symbols but the first call to `server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))' hangs spinning the cpu.
    Joshua Barnett

    Hi all, I'm trying to debug why we're getting client-side errors such as this with grpc-node.

    Error: 14 UNAVAILABLE: GOAWAY received
        at Object.exports.createStatusError (/code/node_modules/grpc/src/common.js:91:15)
        at Object.onReceiveStatus (/code/node_modules/grpc/src/client_interceptors.js:1209:28)
        at InterceptingListener._callNext (/code/node_modules/grpc/src/client_interceptors.js:568:42)
        at InterceptingListener.onReceiveStatus (/code/node_modules/grpc/src/client_interceptors.js:618:8)
        at callback (/code/node_modules/grpc/src/client_interceptors.js:847:24)
        at callbackTrampoline (internal/async_hooks.js:126:14)

    Our server is setup as a headless Kubernetes service with horizontal auto scaling and the following option 'grpc.max_connection_age_ms': 30000 (so that the client will discover new replicas after connections expire).

    Our client is setup with the following options.

    'grpc.dns_min_time_between_resolutions_ms': 0,
    'grpc.service_config': JSON.stringify({
        loadBalancingConfig: [{
            round_robin: {}

    I've seen this issue also mentioned here.

    I'm a bit confused why GOAWAY is treated as a error by the client, when it should signify a graceful connection termination, and I would expect transparent retries to take care of the resending of the request on a different connection?

    22 replies
    Joshua Barnett
    Maybe it's related to this issue (which looks like it was fixed in v1.30.x, but the grpc-node native add-on version is pinned to v1.24.x)?