On Tue, Sep 5, 2017 at 6:07 AM, Amit Saha <[email protected]> wrote:
> > > On Tue, Sep 5, 2017 at 9:02 AM Amit Saha <[email protected]> wrote: > >> On Tue, 5 Sep 2017 at 6:44 am, Ken Payson <[email protected]> wrote: >> >>> gRPC Python sets the SO_REUSEADDR option on server sockets, which allows >>> multiple servers to bind to the same port. >>> >> >> Thanks. Is there any reason why this is set to be the default behavior? >> > > Searching around, I can see that this *may* be desired behavior and hence > gRPC has made a pragmatic choice. However, it seems to be most useful in a > scenario where an existing socket is in the TIME_WAIT state and we want a > new server process to bind to the same addr/port. However, two questions: > > 1. This is not the case here - both of my servers are in LISTEN > I think you are referring to the SO_REUSEPORT option. The SO_REUSEADDR is different, and is intended for having multiple processes bind to the same port. One advantage of this is that you can scale by having multiple processes serving requests. > > 2. Next, considering (1), does it not introduce a race condition when we > have more than one process listening on the same socket? (let's say for > whatever reason, a server process is already running and we have started > another unaware, since we don't get an error). > If you want to avoid this behavior, you can disable it by passing a server option: grpc.server(thread_pool, options=(('grpc.so_reuseport', 0),)) > Will appreciate any insights/pointers. > > Thanks, > Amit. > > > > >> >> >> >>> On Mon, Sep 4, 2017 at 5:58 AM, Amit Saha <[email protected]> wrote: >>> >>>> Hey all, >>>> >>>> This is the relevant part of my server: >>>> >>>> def serve(): >>>> server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) >>>> users_service.add_UsersServicer_to_server(UsersService(), server) >>>> res = server.add_insecure_port('127.0.0.1:50051') >>>> server.start() >>>> try: >>>> while True: >>>> time.sleep(_ONE_DAY_IN_SECONDS) >>>> except KeyboardInterrupt: >>>> server.stop(0) >>>> >>>> >>>> On OS X, by mistake i started the server twice in different terminal >>>> sessions and I expected it to fail the second time (address already bound, >>>> etc). However, it didn't error out and this is what I see via lsof: >>>> >>>> $ sudo lsof -iTCP:50051 >>>> >>>> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME >>>> Python 12120 amit 4u IPv6 0xffbffb1742aa0f0f 0t0 TCP >>>> localhost:50051 (LISTEN) >>>> Python 12157 amit 4u IPv6 0xffbffb1742aa144f 0t0 TCP >>>> localhost:50051 (LISTEN) >>>> >>>> Curiously enough, they both have the same FD. >>>> >>>> (I verified it with a Flask application to see if it was something >>>> Python specific, and i do see the expected error message when I try to >>>> start a second instance of the same) >>>> >>>> Thanks for any hints in advance. >>>> >>>> Best Wishes, >>>> Amit. >>>> >>>> -- >>>> 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/7bef9f00-c9fa-4cdc-91c7-c3555c177c9a%40googlegroups.com >>>> <https://groups.google.com/d/msgid/grpc-io/7bef9f00-c9fa-4cdc-91c7-c3555c177c9a%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/CAGm2-Y5b1MJcNwRj584Vz7AFGhn85-w-mP-QnjYW234avJD87A%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
