LVS
lvs-users
Google
 
Web LinuxVirtualServer.org

[lvs-users] ldirectord deletes pid when config is broken

To: "'lvs-users@xxxxxxxxxxxxxxxxxxxxxx'" <lvs-users@xxxxxxxxxxxxxxxxxxxxxx>
Subject: [lvs-users] ldirectord deletes pid when config is broken
From: Mark Riede <mark.riede@xxxxxxx>
Date: Thu, 28 Apr 2016 10:39:36 +0000
Hello,

when the config is broken and you want to stop, restart or want to get the 
status of the daemon, the initiated new process is checking the config, is 
reporting the error, is exiting with code 2 and unfortunately deletes the pid 
of the still healthy running process.

OS: Ubuntu 14.04.4 LTS
ldirectord: 1:3.9.3+git20121009-3ubuntu2
Pacemaker: 1.1.10+git20130802-1ubuntu2.3

There are two nodes in a cluster.
ldirectord will be checked with '/usr/sbin/ldirectord /etc/ldirectord.cf 
status' every 10 seconds.
When the config is broken, the check exits with the error message and the 
exit-code 2.
Pacemaker switches the resources to node 2.
Unfortunately, the process of ldirectord on node 1 is still running.

This is caused by the config-check when you want to stop, restart or want to 
get the status of the process.
I think it should be enough to check the config only on the start of the 
process.

By the way, the config errors are a result of using host-names in the config 
and a faulty dns-lookup when the process checks the config.

The pid gets deleted via the function config_error.

###########

sub config_error
{
    my ($line, $msg) = @_;

    __config_log($line, "Error", $msg);
    if ($DAEMON_STATUS == $DAEMON_STATUS_STARTING) {
        &ld_rm_file("$RUNPID.$CFGNAME.pid");
        &ld_exit(2, "config_error: Configuration Error");
    } else {
        die;
    }
}

###########


It looks like that there are proper phases (ld_init, ld_setup, etc.), which the 
process runs through everytime you execute it.

###########

$DAEMON_STATUS = $DAEMON_STATUS_STARTING;
ld_init();
ld_setup();
ld_start();
ld_cmd_children("start", %LD_INSTANCE);
$DAEMON_STATUS = $DAEMON_STATUS_RUNNING;
ld_main();

###########


But as far as I was able to debug it, it seems that everything is handled by 
the function ld_init and the process never runs through the following functions.

You can reproduce the error when you enter a typo in the config like 
'checktimeoutt=3'.

Best regards,
Mark
_______________________________________________
Please read the documentation before posting - it's available at:
http://www.linuxvirtualserver.org/

LinuxVirtualServer.org mailing list - lvs-users@xxxxxxxxxxxxxxxxxxxxxx
Send requests to lvs-users-request@xxxxxxxxxxxxxxxxxxxxxx
or go to http://lists.graemef.net/mailman/listinfo/lvs-users

<Prev in Thread] Current Thread [Next in Thread>
  • [lvs-users] ldirectord deletes pid when config is broken, Mark Riede <=