Gwen,

That sounds about right to me. I've found that when ports are bound
dynamically, RAII-style greatly simplifies things since if you've bound
them as early as possible, then you'll always be able to get at the port
even if nothing is accept()ing yet.

-Ewen

On Sat, Apr 4, 2015 at 8:27 PM, Gwen Shapira <gshap...@cloudera.com> wrote:

> Thanks. I think I found a solution that doesn't take new locks or buffers:
>
> 1. Change the portProtocol map to ConcurrentHashMap (which makes it both
> thread-safe and mutable). Initialize as empty map.
> 2. Initialize both processors and acceptors with the hashmap, also tell
> each acceptor which protocol it is accepting
> 3. After the acceptors bind() but before run(), register them with the
> hashmap.
>
> Anyone sees flaws here?
>
> On Sat, Apr 4, 2015 at 7:21 PM, Ashish Singh <asi...@cloudera.com> wrote:
>
> > Hi Gwen,
> >
> > Can we buffer the requests that arrive before acceptors are up. Once we
> > have the acceptors, the buffer can be cleared. However, this adds on to
> the
> > complexity.
> >
> > On Sunday, April 5, 2015, Gwen Shapira <gshap...@cloudera.com> wrote:
> >
> > > Hi,
> > >
> > > I'm trying to rebase KAFKA-1809 after KAFKA-1501 was committed, and I'm
> > > running into a chicken and egg problem.
> > >
> > > In my design, SocketServer creates a map of port->SecurityProtocol.
> > > This map is passed to Processor when it is initialized, and Processor
> > uses
> > > it to route requests to the correct channel.
> > >
> > > However, after KAFKA-1501, we may not know the ports until after
> > Acceptors
> > > are started, and we want to start Acceptors after Processors are
> already
> > > running...
> > >
> > > One solution is that if Processor finds that all keys in the map are
> "0",
> > > it will route all requests to PLAINTEXT channel. However, this will
> > prevent
> > > us from using the new port-binding test code when testing TLS and SASL,
> > > bringing the whole port randomization problem back.
> > >
> > > Another option is new flag that will allow us to bind Acceptors before
> > > starting Processors but not accept anything until this flag is set,
> after
> > > the Processors started? This seems a bit tricky though.
> > >
> > > Anyone has better ideas?
> > >
> > > Gwen
> > >
> >
> >
> > --
> >
> > Regards,
> > Ashish
> >
>



-- 
Thanks,
Ewen

Reply via email to