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:
parent
1d7e0a0042
commit
387055a3be
@ -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()
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user