mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	to address the review comments:
- using signal to handle the cleanup
This commit is contained in:
		| @@ -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(); | ||||
| } | ||||
|  | ||||
| #-------------------------------------------------------------------------------- | ||||
|   | ||||
		Reference in New Issue
	
	Block a user