fix bug 3500392: FB->console abnormal if off/on blade

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11922 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
zhaoertao 2012-03-21 07:13:03 +00:00
parent 1c006a4162
commit d27ef5117f

View File

@ -254,7 +254,8 @@ sub invoke_cmd {
my $res;
my $index = 0;
my $pre_state = undef;
my $wait_interval =20;
#my $wait_interval =20;
my $ipl_num = 0;
while (1) {
$res = xCAT::Utils->runcmd($power_state_cmd, -1);
if ($res =~ /(operating|standby)$/) {
@ -264,43 +265,56 @@ sub invoke_cmd {
if (!$pre_state or ($pre_state ne $1)) {
$pre_state = $1;
print "\nDestination $machine is in POWER OFF state, Please power it on and wait.";
sleep 5;
} else {
print ".";
sleep 30;
}
} elsif (($res =~ /(power-on-transition)$/) or ($pre_state eq "power off" and $res =~ /$node :\s([.*])/)) {
if (!$pre_state or ($pre_state ne $1)) {
$pre_state = $1;
$index++;
print "\nDestination $machine is POWERING ON, please wait.";
sleep 5;
} else {
print ".";
sleep 30;
}
} elsif ($res =~ /(power-off-transition)$/) {
if (!$pre_state or ($pre_state ne $1)) {
$pre_state = $1;
print "\nDestination $machine is POWERING OFF.";
sleep 20;
} else {
print ".";
sleep 5;
next;
}
} elsif ($res =~ /(IPL-in-process)$/) {
if ($pre_state and ($pre_state eq $1) and !$index) {
if (!$pre_state) {
$pre_state =$1;
sleep 10;
next;
} elsif ($pre_state and ($pre_state eq $1) and !$index) {
print "\nDestination $machine is POWERING ON, please wait.";
$index++;
} else {
print ".";
#print "\r\n====>pre_state=$pre_state\n";
$ipl_num++;
$pre_state = $1;
if ($index == 1) {
sleep 5;
next;
if ($ipl_num == 4) {
print ".";
$ipl_num = 0;
}
}
sleep 5;
} else {
$pre_state = $res;
print ".";
#print ".";
sleep 20;
}
$wait_interval =20+int(rand(20));
sleep $wait_interval;
#$wait_interval =20+int(rand(20));
#sleep $wait_interval;
}
my $cmd = "$fsp_api -a $action -t $type:$fsp_ip:$id:$node:\r";
@ -342,14 +356,22 @@ sub invoke_cmd {
if ($failed == 3) {
my $link_cmd = "$fsp_api -a fsp_reconnect -t $type:$fsp_ip:$id:$node: 2>&1";
xCAT::Utils->runcmd($link_cmd, -1);
print "The connection is resetting, please wait.";
my $link_state = "";
my $rs_num = 0;
while (!$link_state or $link_state !~ /state=LINE UP/i) {
sleep 10;
sleep 2;
$rs_num++;
$link_cmd = "$fsp_api -a query_connection -t $type:$fsp_ip:$id:$node: 2>&1";
$link_state = xCAT::Utils->runcmd($link_cmd, -1);
if ($rs_num == 5) {
print ".";
$rs_num = 0;
}
}
print "\n";
$exp->hard_close();
return("The connection is reset, please wait...");
return (0);
}
my $escape = "\030";