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

Move sleep retry from xcat to goconserver

If cons script is waiting, goconserver could not aware of
the status of the console connection. This patch check
the environment when running the script, if it is gocons
and retrying is needed, exit immediately.
This commit is contained in:
chenglch 2018-02-06 17:43:16 +08:00
parent 44938a324a
commit 2da3f5140d
9 changed files with 103 additions and 106 deletions

View File

@ -4949,4 +4949,24 @@ sub natural_sort_cmp($$) {
}
}
#--------------------------------------------------------------------------------
=head3 console_sleep
A wrap for sleep subroutine, if goconserver is used, just exit immidiately
as goconserver has its own sleep mechanism.
=cut
#--------------------------------------------------------------------------------
sub console_sleep {
my $time = shift;
my $message = shift;
if($ENV{CONSOLE_TYPE} && $ENV{CONSOLE_TYPE} eq "gocons") {
# sleep time is handled by goconserver itself
exit(1);
}
print $message if $message;
sleep($time);
}
1;

View File

@ -24,21 +24,20 @@ BEGIN
use File::Path;
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
}
my $sleepint = int(rand(10)); #Stagger start to avoid overwhelming conserver/xCATd
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
require File::Basename;
import File::Basename;
my $scriptname = $0;
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
my $username = "USERID";
my $passsword = "PASSW0RD";
@ -63,8 +62,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($mm and $username and $slot) {
release_lock(); #Let other clients have a go
$sleepint = 10 + int(rand(20)); #Stagger to minimize lock collisions, but no big deal when it does happen
print "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n";
sleep $sleepint;
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n");
get_lock();
xCAT::Client::submit_request($cmdref, \&getans);
}
@ -73,8 +71,7 @@ my $solchkcmd = "ssh -t $username" . "@" . "$mm sol -T blade[$slot]";
my $solstatus = `$solchkcmd`;
while ($solstatus !~ /SOL Session: Ready/ and $solstatus !~ /SOL Session: Active/) {
$sleepint = 60 + int(rand(30)); #Stagger sleep to take it easy on AMM/hosting server
print "SOL unavailable, retrying in $sleepint seconds (hit Ctrl-E,c,o to skip)\n";
sleep $sleepint;
xCAT::Utils::console_sleep($sleepint, "SOL unavailable, retrying in $sleepint seconds (hit Ctrl-E,c,o to skip)\n");
$solstatus = `$solchkcmd`;
}
exec "ssh -t $username" . "@" . "$mm console -o -T blade[$slot]";

View File

@ -24,24 +24,23 @@ BEGIN
use File::Path;
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
}
my $sleepint = int(rand(10));
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
use strict;
use xCAT::PPCcli qw(SUCCESS EXPECT_ERROR RC_ERROR NR_ERROR);
use Data::Dumper;
require File::Basename;
import File::Basename;
my $scriptname = $0;
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
##############################################
# Globals
@ -109,8 +108,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($lparid and $host and $mtms) {
release_lock(); #Let other clients have a go
$sleepint = 10 + int(rand(20)); #Stagger to minimize lock collisions, but no big deal when it does happen
print "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n";
sleep $sleepint;
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n");
get_lock();
xCAT::Client::submit_request($cmdref, \&getans);
}

View File

@ -30,22 +30,21 @@ BEGIN
use File::Path;
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
}
my $sleepint = int(rand(10)); #Stagger start to avoid overwhelming conserver/xCATd
use lib "$::XCATROOT/lib/perl";
$ENV{HOME} = '/root/';
require xCAT::Client;
require xCAT::Utils;
require File::Basename;
import File::Basename;
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
my $scriptname = $0;
my $username = "admin";
my $passsword = "PASSW0RD";
@ -69,8 +68,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($mm and $username and $slot) {
release_lock(); #Let other clients have a go
$sleepint = 10 + int(rand(20)); #Stagger to minimize lock collisions, but no big deal when it does happen
print "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n";
sleep $sleepint;
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n");
get_lock();
xCAT::Client::submit_request($cmdref, \&getans);
}

View File

@ -6,6 +6,10 @@ use File::Path;
BEGIN {
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr';
}
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
my $sleepint = int(rand(10)); #Stagger start to avoid overwhelming conserver/xCATd
my ($lockfd, $bmc);
my $username = 'USERID';
@ -20,21 +24,18 @@ sub acquire_lock {
mkpath(CONSOLE_LOCK_DIR);
print "Acquiring startup lock...";
unless (sysopen($lockfd, CONSOLE_LOCK_FILE, O_WRONLY | O_CREAT)) {
print "Unable to open file ".CONSOLE_LOCK_FILE."\n";
sleep(15);
xCAT::Utils::console_sleep(15, "Unable to open file ".CONSOLE_LOCK_FILE."\n");
exit 1;
}
unless (flock($lockfd, LOCK_EX)) {
print "Unable to lock file ".CONSOLE_LOCK_FILE."\n";
close($lockfd);
sleep(15);
xCAT::Utils::console_sleep(15, "Unable to lock file ".CONSOLE_LOCK_FILE."\n");
exit 1;
}
print "done\n";
unless (syswrite($lockfd, $$, length($$))) {
print "Unable to write file ".CONSOLE_LOCK_FILE."\n";
close($lockfd);
sleep(15);
xCAT::Utils::console_sleep(15, "Unable to write file ".CONSOLE_LOCK_FILE."\n");
exit 1;
}
}
@ -44,10 +45,6 @@ sub release_lock {
close($lockfd);
}
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
sub getans {
my $rsp = shift;
if ($rsp->{node}) {
@ -74,8 +71,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until (($username or $password) and $bmc) {
#Let other clients have a go
$sleepint = 10 + int(rand(20));
print "Console not ready, retrying in $sleepint seconds (Ctrl-e,c,o to skip delay) \n";
sleep ($sleepint);
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Ctrl-e,c,o to skip delay) \n");
acquire_lock();
sleep(0.1);
release_lock();
@ -109,8 +105,7 @@ if ($rc) { #some shoddy vendors ignore the IPMI 2.0 requirement to support IPMI
}
while ($rc != 0) {
$sleepint = 10 + int(rand(20));
print "Failure to reach IPMI device, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip)\n";
sleep ($sleepint);
xCAT::Utils::console_sleep($sleepint, "Failure to reach IPMI device, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip)\n");
@mcinfo = `$ipmitool -I lanplus $user $pass -H $bmc mc info`;
$rc = $?;
if ($rc) { #repeat workaround for shoddy vendors

View File

@ -25,31 +25,17 @@ BEGIN
use File::Path;
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
my $sleepint = int(rand(10)); #Stagger start to avoid overwhelming conserver/xCATd
print "Opening console in " . (2 + (0.5 * $sleepint)) . " seconds...\n";
sleep $sleepint;
}
my $sleepint = int(rand(10));
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
use strict;
#use Getopt::Long;
#use xCAT::Table;
#use xCAT::PPCdb;
use xCAT::PPCcli qw(SUCCESS EXPECT_ERROR RC_ERROR NR_ERROR);
use Data::Dumper;
require File::Basename;
import File::Basename;
my $scriptname = $0;
##############################################
# Globals
@ -61,6 +47,15 @@ my $lparid;
my $mtms;
my @cred;
my $credencial;
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
my $sleepint = int(rand(10)); #Stagger start to avoid overwhelming conserver/xCATd
xCAT::Utils::console_sleep($sleepint, "Opening console in " . (2 + (0.5 * $sleepint)) . " seconds...\n");
##########################################################################
# Open remote console
@ -121,8 +116,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($lparid and $host and $mtms) {
release_lock(); #Let other clients have a go
$sleepint = 10 + int(rand(20)); #Stagger to minimize lock collisions, but no big deal when it does happen
print "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n";
sleep $sleepint;
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n");
get_lock();
xCAT::Client::submit_request($cmdref, \&getans);
}

View File

@ -1,5 +1,6 @@
#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
use strict;
use Fcntl qw(:DEFAULT :flock);
sub get_lock {
@ -25,24 +26,23 @@ BEGIN
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
}
my $sleepint;
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
require File::Basename;
import File::Basename;
my $scriptname = $0;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
my $cmdref = {
command => ["getcons"],
arg => ["text"],
@ -65,8 +65,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($dsthost and $speed and $dstty) {
release_lock();
$sleepint = int(rand(30)) + 60;
print "Console not ready, retrying in $sleepint seconds (Ctrl-C to skip delay)\n";
exec "sleep $sleepint";
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds ( Ctrl-E c o to skip delay)\n");
}
release_lock();

View File

@ -24,23 +24,23 @@ BEGIN
use File::Path;
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
}
my $sleepint = int(rand(10));
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
use strict;
use Expect;
use xCAT::PPCcli qw(SUCCESS EXPECT_ERROR RC_ERROR NR_ERROR);
require File::Basename;
import File::Basename;
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
##############################################
# Globals
@ -182,8 +182,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($hcps) {
release_lock(); #Let other clients have a go
$sleepint = 10 + int(rand(20)); #Stagger to minimize lock collisions, but no big deal when it does happen
print "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n";
sleep $sleepint;
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Hit Ctrl-E,c,o to skip delay)\n");
get_lock();
xCAT::Client::submit_request($cmdref, \&getans);
}

View File

@ -24,23 +24,21 @@ BEGIN
use File::Path;
use Fcntl qw(:DEFAULT :flock);
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
sleep 15;
print "Unable to open lock file";
exit 0;
}
get_lock();
}
my $sleepint;
use lib "$::XCATROOT/lib/perl";
require xCAT::Client;
require xCAT::Utils;
require File::Basename;
import File::Basename;
my $scriptname = $0;
umask 0077;
mkpath("/tmp/xcat/");
unless (sysopen(LOCKHANDLE, "/tmp/xcat/consolelock", O_WRONLY | O_CREAT)) {
xCAT::Utils::console_sleep(15, "Unable to open lock file");
exit 0;
}
get_lock();
my $cmdref = {
command => "getxencons",
@ -64,8 +62,7 @@ xCAT::Client::submit_request($cmdref, \&getans);
until ($dsthost and $speed and $dstty) {
release_lock();
$sleepint = int(rand(30)) + 60;
print "Console not ready, retrying in $sleepint seconds (Ctrl-C to skip delay)\n";
exec "sleep $sleepint";
xCAT::Utils::console_sleep($sleepint, "Console not ready, retrying in $sleepint seconds (Ctrl-C to skip delay)\n");
}
release_lock();
exec "ssh -t $dsthost screen -U -a -O -e ^]a -d -R -S serial-" . $ARGV[0] . "-cons -A $dstty $speed";