On Wed, Jun 30, 2010 at 5:08 PM, Guido Trotter <[email protected]> wrote:
> On Wed, Jun 30, 2010 at 2:57 PM, Manuel Franceschini
> <[email protected]> wrote:
>> On Wed, Jun 30, 2010 at 3:04 PM, Guido Trotter <[email protected]> wrote:
>>> On Wed, Jun 30, 2010 at 1:14 PM, Manuel Franceschini
>>> <[email protected]> wrote:
>>>
>>>> + daemon.AsyncUDPSocket.__init__(self,
>>>> utils.GetAddressFamily(bind_address))
>>>
>>> Are you sure this works? bind_address is '' by default and
>>> GetAddressFamily fails on that.
>>
>> By default it is "0.0.0.0". Currently if an invalid address is passed
>> we fail with 'socket.gaierror'. This improves that by raising a
>> 'GenericError' that GetAddressFamily throws.
>>
>
> Right... Mmm... the docstring still says that by default it's ''.
> Wonder when that changed, and if we should fix the docstring. :)
I think an empty string should raise an exception (as it does with
this patch). I removed that from the docstring. Allowed values are
either a valid address or IP{4,6}_ADDRESS_ANY.
>>> Also, if bind_address is '' I'd say we should create two sockets, and
>>> bind on both ip4 and ip6, if the hosts has addresses/supports either.
>>
>> The plan was to use a cluster-level parameter to determine whether
>> IPv4 or IPv6 is preferred. Based on that information we could bind
>> confd. What about doing that for now and see whether/how we support
>> hybrid clusters?
>
> Well, for confd for example it's quite simple to support either, as
> it's a quite standalone component. I wouldn't say "let's have 3 nodes
> on v4 and 3 on v6" but for example having rapi and confd reachable by
> either sounds worth it. And a good path to transition. We'd need to
> save both the v4 and v6 ip in the config file for this to work, but I
> guess that would be doable.
It is certainly doable and might be worth it. However, if the
cluster-level preference is, say, IPv4 and not all nodes have IPv6
enabled, we could end up with a hybrid setup. Do we want that? For
consistency and error detection it is simpler and more robust to have
a preference (either IPv4 or IPv6 or both) and then check whether all
(affected) nodes comply to that. In other words, if the cluster
preference is IPv4 we should not automagically accept IPv6
connections.
In order to achieve that, we could introduce a IP_ADDRESS_ANY constant
that would instruct a daemon to create sockets for both IPv4 and IPv6.
What do you think?
Manuel