Forgot to add the ML :/
On 01/16/2016 07:43 PM, Nenad Merdanovic wrote:
> Hello Robert,
>
> + Baptiste
>
>>
>> Connect() failed for backend bk: no free ports.
>>
>> If you comment out either the load-server-state-from-file line or remove
>> 'resolvers dns' from the end of the server line, then the backend works
>> correctly.
>>
>
> This happens because of:
> server.c:2156
> /* update server IP only if DNS resolution is used on the server */
> if (srv->resolution) {
> memset(&addr, 0, sizeof(struct sockaddr_storage));
> if (str2ip2(params[0], &addr, 0))
> memcpy(&srv->addr, &addr, sizeof(struct sockaddr_storage));
>
> str2ip2 doesn't work with ports (and there are none in the dump file),
> yet we overwrite the whole struct.
>
> Few options I see:
> 1. Dump the port to the state file, use str2sa_range
> 2. Check the ss_family of 'addr', memcpy only the address
>
> And my personal favorite
> 3. Just (ab)use something like "server_parse_addr_change_request(srv,
> params[0]);" with a small change so it accepts the 'updater' also, which
> could say 'server-state' or something.
>
>> The same behaviour with 1.7-dev1, and I encounter the issue on Linux and OSX.
>>
>> It’s worth noting that "show servers state" returns nothing if there are a
>> lot of backends, hence I’m using the 'local' option.
>>
>>
>> B.
>>
>
> Regards,
> Nenad
>