Broken ldirectord reload

Roberto Nibali ratz at drugphish.ch
Fri Mar 16 07:50:53 GMT 2007


Hello,

I've cc'd Horms, since that's the way to get his attention regarding 
ldirectord patches. He's insanely busy, so you need some patience.


> ldirectord (version 1.186/1.42) does not seem to handle reloads
> correctly.   After reload, some parameters for virtual server in its
> hash are left uninitialized (e.g. $$v{proto}).  As the result, service
> checking does not work correctly any more and ldirectord is attempting
> to run ipvsadm with invalid list of arguments.

Does this happen in case the:

1. old configuration == new configuration?
2. old configuration contains more VIPs or RIPs than new configuration?
3. old configuration contains less VIPs or RIPs than new configuration?
4. old configuration is almost completely different compared to new 
configuration?

> Missing parameters are normally initialized in ld_setup function.
> This function is not called during reload.  Adding ld_setup call to
> reread_config seems to fix the issue.  Possible fix:
> 
> --- /usr/sbin/ldirectord.orig   2007-02-12 23:06:29.000000000 +0100
> +++ /usr/sbin/ldirectord        2007-03-14 12:08:36.000000000 +0100
> @@ -917,6 +917,8 @@
>                &ld_cmd_children("stop", %STOP);
>                &ld_cmd_children("reload_or_start", %RELOAD);
>                &ld_cmd_children("start", %START);
> +
> +               &ld_setup();
>        };
>        if ($@) {
>                @VIRTUAL = @OLDVIRTUAL;
> 
> Can anyone more familiar with ldirectord internals review such fix and
> point out potential problems?

I'm not very familiar with ldirectord, although I've dug through it in 
the past. However, your fix seems appropriate. Nevertheless, I find it 
somewhat interesting that you're the first one hitting this issue, as if 
noone ever reloaded ldirectord :). It's clear that when reloading 
(sending SIGHUP to the $PID) ld_setup() is not explicitly called anymore.

Is your old $PID available when this happens? Could it be a signaling 
issue? Can you also check the pending signals with ps as when it comes 
to a reload and your problem is exhibited? I'm just asking because there 
is a lot of potentially CPU-intensive stuff being processed during the 
SIGHUP interrupt handler in ldirectord. Otherwise I'd say that your 
patch look sane.

Best regards,
Roberto Nibali, ratz
-- 
echo 
'[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq' | dc

Search lvs-users Archives
Limit search to: Subject & Body Subject Author
Sort by: Reverse Sort

More information about the lvs-users mailing list