2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-22 03:32:04 +00:00

to address the review comments:

- using signal to handle the cleanup
This commit is contained in:
Bin Xu 2018-03-13 16:56:55 +08:00
parent 1d7e0a0042
commit 387055a3be
2 changed files with 17 additions and 15 deletions

View File

@ -129,6 +129,6 @@ class Server(object):
t.start()
def start(self):
if not self.standalone and self.lockfile:
if not self.standalone:
self.keep_peer_alive()
self.server.serve_forever()

View File

@ -25,8 +25,8 @@ use xCAT_monitoring::monitorctrl;
use xCAT::TableUtils;
my $LOCK_DIR = "/var/lock/xcat/";
my $LOCK_PATH = "/var/lock/xcat/agent.lock";
my $AGENT_SOCK_PATH = "/var/run/xcat/agent.sock";
my $LOCK_PATH = "/var/lock/xcat/agent-$$.lock";
my $AGENT_SOCK_PATH = "/var/run/xcat/agent-$$.sock";
my $PYTHON_LOG_PATH = "/var/log/xcat/agent.log";
my $PYTHON_AGENT_FILE = "/opt/xcat/lib/python/agent/agent.py";
my $MSG_TYPE = "message";
@ -64,10 +64,10 @@ sub send_request {
sub acquire_lock {
mkpath($LOCK_DIR);
# always create a new lock file
unlink($LOCK_PATH . $$);
open($lock_fd, ">>", $LOCK_PATH . $$) or return undef;
unlink($LOCK_PATH);
open($lock_fd, ">>", $LOCK_PATH) or return undef;
flock($lock_fd, LOCK_EX) or return undef;
return $LOCK_PATH . $$;
return $lock_fd;
}
sub exists_python_agent {
@ -76,10 +76,13 @@ sub exists_python_agent {
}
return 0;
}
sub python_agent_reaper {
unlink($LOCK_PATH);
unlink($AGENT_SOCK_PATH);
}
sub start_python_agent {
my $lockfile = acquire_lock();
if (!defined($lockfile)) {
if (!defined(acquire_lock())) {
xCAT::MsgUtils->message("S", "start_python_agent() Error: Failed to acquire lock");
return undef;
}
@ -91,18 +94,18 @@ sub start_python_agent {
return undef;
} elsif ($pid){
open($fd, '>', $AGENT_SOCK_PATH . $pid) && close($fd);
open($fd, '>', $AGENT_SOCK_PATH) && close($fd);
$SIG{INT} = $SIG{TERM} = \&python_agent_reaper;
return $pid;
}
$SIG{CHLD} = 'DEFAULT';
if (!$pid) {
# child
open($fd, ">>", $PYTHON_LOG_PATH) && close($fd);
open(STDOUT, '>>', $PYTHON_LOG_PATH) or die("open: $!");
open(STDERR, '>>&', \*STDOUT) or die("open: $!");
my @args = ( "$PYTHON_AGENT_FILE --sock $AGENT_SOCK_PATH$$ --lockfile $lockfile" );
my @args = ( "$PYTHON_AGENT_FILE --sock $AGENT_SOCK_PATH --lockfile $LOCK_PATH" );
my $ret = exec @args;
if (!defined($ret)) {
xCAT::MsgUtils->message("S", "start_python_agent() Error: Failed to start the xCAT Python agent.");
@ -139,7 +142,7 @@ sub submit_agent_request {
my $sock;
my $retry = 0;
while($retry < 30) {
$sock = IO::Socket::UNIX->new(Peer => $AGENT_SOCK_PATH . $pid, Type => SOCK_STREAM, Timeout => 10, Blocking => 1);
$sock = IO::Socket::UNIX->new(Peer => $AGENT_SOCK_PATH, Type => SOCK_STREAM, Timeout => 10, Blocking => 1);
if (!defined($sock)) {
sleep(0.1);
} else {
@ -148,7 +151,7 @@ sub submit_agent_request {
$retry++;
}
if (!defined($sock)) {
xCAT::MsgUtils->message("E", { data => ["OpenBMC management is using a Python framework. An error has occurred when trying to create socket $AGENT_SOCK_PATH$pid."] }, $callback);
xCAT::MsgUtils->message("E", { data => ["OpenBMC management is using a Python framework. An error has occurred when trying to create socket $AGENT_SOCK_PATH."] }, $callback);
kill('TERM', $pid);
return;
}
@ -209,8 +212,7 @@ sub wait_agent {
xCAT::MsgUtils->message("E", { data => ["Agent exited unexpectedly. See $PYTHON_LOG_PATH for details."] }, $callback);
xCAT::MsgUtils->message("I", { data => ["To revert to Perl framework: chdef -t site clustersite openbmcperl=ALL"] }, $callback);
}
unlink($AGENT_SOCK_PATH . $pid);
unlink($LOCK_PATH . $$);
python_agent_reaper();
}
#--------------------------------------------------------------------------------