Hi Jared,

I was referring to InetSocketAddress(port) (or InetSocketAddress(port,
null)), which uses a wild-card IP address. If you decide to make this
optional, couldn't you can use Java property to select which
InetSocketAddress() constructor to use? As mentioned earlier, I agree that
keeping it optional does not buy us much. But it might be good to get a vote
on this.

-Vishal

On Fri, Aug 27, 2010 at 10:58 AM, Jared Cantwell
<jared.cantw...@gmail.com>wrote:

> Hi Vishal,
>
> Each server uses a different configuration file, so config files for
> different servers can be different.  If you were in a situation where you
> would _want_ to bind to the wildcard interface, then you would need
> different configuration files anyway.  For example....
>
> Assume Server 1 has two interfaces, one for each of 192.168.0.1 and
> 192.168.0.2.
> ---- Server 1 config file -----
> server.1=*:3181:4181
> server.2=192.169.0.3:3181:4181
> server.3=192.169.0.4:3181:4181
> ----------------------------------
>
> ---- Server 2 config file -----
> server.1=192.168.0.1:3181:4181  <--- note the ip
> server.2=192.169.0.3:3181:4181
> server.3=192.169.0.4:3181:4181
> ----------------------------------
>
> ---- Server 3 config file -----
> server.1=192.168.0.2:3181:4181  <--- note the ip
> server.2=192.169.0.3:3181:4181
> server.3=192.169.0.4:3181:4181
> ----------------------------------
>
> In this situation, where two servers are communicating with you through
> different addresses, server 1 needs to bind to *.  However, in the normal
> case where everyone has the same config file, every server will communicate
> with server 1 on the same address, so server 1 has no need to bind to any
> other address.
>
> To me it seems like another config option would tell server 1 to bind to
> wildcard (or a host or whatever), but then the config files of the servers
> would still have to be different...
>
> Does that make sense?
>
> Jared
>
>
> On Fri, Aug 27, 2010 at 10:49 AM, Vishal K <vishalm...@gmail.com> wrote:
>
> > Hi Jared,
> >
> > If we keep this optional, then the servers would not need to bind to any
> > specific interface. We will just use the current implementation
> > (InetSocketAddress(port) with wildcard IP).
> > You are right, keeping it optional does not buy us much. However, I did
> not
> > understand your solution of using "server.#:0.0.0.0[:port][:port]" in the
> > config file.
> > How will a peer know the IP address of other peers?
> >
> > -Vishal
> >
> > On Fri, Aug 27, 2010 at 10:20 AM, Jared Cantwell
> > <jared.cantw...@gmail.com>wrote:
> >
> > > Thanks for the response Vishal.  I agree that it should be used for
> both
> > > FLE
> > > and normal communication (both server ports).  I believe the diff I
> sent
> > > incorporates that thinking, although I may not have been clear.  I
> > > considered that it be optional, but cases where you would want it to
> bind
> > > on
> > > all interfaces seem rare to me, since it would require specializing the
> > > config files for each server so that two different servers communicated
> > > with
> > > a third server on different ports.  Users who would want this to be
> > > optional
> > > could achieve the same effect by specifying their own
> > > "server.#=address[:port][:[port]" entry as
> > > "server.#:0.0.0.0[:port][:port]".
> > >
> > > I guess my proposal is that the address specified in the server.#
> should
> > be
> > > used.  Advanced configurations can specify 0:0:0:0 to get the current
> > > behavior.  This way there wouldn't need to be another option to say
> that
> > > (which would need customized anyway in such configurations).
> > >
> > > ~Jared
> > >
> > > On Fri, Aug 27, 2010 at 9:45 AM, Vishal K <vishalm...@gmail.com>
> wrote:
> > >
> > > > Hi Jared,
> > > >
> > > > I like the idea of allowing communication with ZK on only the IP
> > > addresses
> > > > specified in the config file. This is useful when you are having a
> host
> > > > with
> > > > multiple IP address and/or when you want to have traffic isolation.
> In
> > > our
> > > > setup, we will use this feature for traffic isolation. We have
> multiple
> > > > interfaces on the server, and we want to route certain type of
> traffic
> > > > through certain interfaces.
> > > >
> > > > Why not have this feature for both FLE and leader-follower
> > communication?
> > > I
> > > > would suggest to keep this optional (add a property) since most users
> > > would
> > > > prefer to have the ability to reach the servers from all interfaces.
> > > >
> > > > -Vishal
> > > >
> > > > On Thu, Aug 26, 2010 at 1:34 PM, Jared Cantwell <
> > > jared.cantw...@gmail.com
> > > > >wrote:
> > > >
> > > > > Hello,
> > > > >
> > > > > My project currently has the need to specify the local address that
> > is
> > > > used
> > > > > for leader communication (and not use the default of listening on
> all
> > > > > interfaces).  This is similar to the clientPortAddress parameter
> that
> > > was
> > > > > recently added.  After reviewing the code, we can't think of a
> reason
> > > why
> > > > > only the port would be used with the wildcard interface, when
> servers
> > > are
> > > > > already connecting specifically to that interface anyway.  Is
> binding
> > > to
> > > > > the
> > > > > wildcard interface for leader communication intentional?
> > > > >
> > > > > I believe the change would be straightforward-- one change for each
> > > > leader
> > > > > port used.  Note: this doesn't account for all leader election
> > > > algorithms,
> > > > > only the default.
> > > > >
> > > > > Index:
> > > > >
> > src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
> > > > > ===================================================================
> > > > > ---
> > > > >
> > src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
> > > > > (revision 989805)
> > > > > +++
> > > > >
> > src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
> > > > > (working copy)
> > > > > @@ -434,7 +434,7 @@
> > > > >                     ss = ServerSocketChannel.open();
> > > > >                     int port =
> > > > > self.quorumPeers.get(self.getId()).electionAddr.getPort();
> > > > >                     ss.socket().setReuseAddress(true);
> > > > > -                    InetSocketAddress addr = new
> > > > InetSocketAddress(port);
> > > > > +                    InetSocketAddress addr =
> > > > > self.quorumPeers.get(self.getId()).electionAddr;
> > > > >                     LOG.info("My election bind port: " +
> > > > addr.toString());
> > > > >                     setName(addr.toString());
> > > > >                     ss.socket().bind(addr);
> > > > > Index: src/java/main/org/apache/zookeeper/server/quorum/Leader.java
> > > > > ===================================================================
> > > > > --- src/java/main/org/apache/zookeeper/server/quorum/Leader.java
> > > > > (revision 989805)
> > > > > +++ src/java/main/org/apache/zookeeper/server/quorum/Leader.java
> > > > >  (working
> > > > > copy)
> > > > > @@ -128,10 +128,11 @@
> > > > >     Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws
> > IOException
> > > {
> > > > >         this.self = self;
> > > > >         try {
> > > > > -            ss = new
> > ServerSocket(self.getQuorumAddress().getPort());
> > > > > +            ss = new ServerSocket();
> > > > > +        ss.bind(self.getQuorumAddress());
> > > > >         } catch (BindException e) {
> > > > > -            LOG.error("Couldn't bind to port "
> > > > > -                    + self.getQuorumAddress().getPort(), e);
> > > > > +            LOG.error("Couldn't bind to address "
> > > > > +                    + self.getQuorumAddress().getAddress() + ":" +
> > > > > self.getQuorumAddress().getPort(), e);
> > > > >             throw e;
> > > > >         }
> > > > >         this.zk=zk;
> > > > >
> > > > >
> > > > > Does this seem like a reasonable change? Thoughts?
> > > > >
> > > > > ~Jared
> > > > >
> > > >
> > >
> >
>

Reply via email to