From 1a46ed463dd4753c0719cc752fdd1e083c66b80e Mon Sep 17 00:00:00 2001 From: yinle Date: Tue, 24 May 2011 09:27:41 +0000 Subject: [PATCH] fix a mistake, add some trace information. Now the debugger can use $TRACE=1 to control the trace info in parse_responses. git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9668 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/lsslp.pm | 120 ++++++++++++++++---------- 1 file changed, 76 insertions(+), 44 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/lsslp.pm b/xCAT-server/lib/xcat/plugins/lsslp.pm index 7cac29cd5..eabf588cc 100644 --- a/xCAT-server/lib/xcat/plugins/lsslp.pm +++ b/xCAT-server/lib/xcat/plugins/lsslp.pm @@ -143,6 +143,7 @@ my $time_out = 300; my $enter_time = 0; my @filternodes; my %otherinterfacehash; +my $TRACE = 0; ########################################################################## # Command handler method from tables ########################################################################## @@ -428,12 +429,21 @@ sub trace { my $request = shift; my $msg = shift; + my $sig = shift; - if ( $verbose ) { - my ($sec,$min,$hour,$mday,$mon,$yr,$wday,$yday,$dst) = localtime(time); - my $msg = sprintf "%02d:%02d:%02d %5d %s", $hour,$min,$sec,$$,$msg; - send_msg( $request, 0, $msg ); - } + if ($sig) { + if ($TRACE) { + my ($sec,$min,$hour,$mday,$mon,$yr,$wday,$yday,$dst) = localtime(time); + my $msg = sprintf "%02d:%02d:%02d %5d %s", $hour,$min,$sec,$$,$msg; + send_msg( $request, 0, $msg ); + } + } else { + if ( $verbose ) { + my ($sec,$min,$hour,$mday,$mon,$yr,$wday,$yday,$dst) = localtime(time); + my $msg = sprintf "%02d:%02d:%02d %5d %s", $hour,$min,$sec,$$,$msg; + send_msg( $request, 0, $msg ); + } + } } @@ -2105,6 +2115,9 @@ sub parse_responses { my %fid1; my %fid2; my %cid; + + + trace( $request, "Now I will explain how the lsslp parse its response: " , 1); foreach my $rsp ( @$values ) { ########################################### # Get service-type from response @@ -2173,9 +2186,8 @@ sub parse_responses { # $hostip{$entry->{node}} = $entry->{ip}; #} - #$result[0] is type, $result[1] is mtm, $result[2] is sn, $result[3] is ip, - #$result[4] is side, $result[5] is parent mtm, $result[6] is parent sn, - #$result[7] is frame number, $result[8] is cage number + trace( $request, "The type is $result[0], mtm is $result[1], sn is $result[2], side is $result[3], ip is $result[4], parent mtm is $result[5], parent sn is $result[6], frame num is $result[7], cage num is $result[8].", 1 ); + # begin to define FSP/BPA/FRAME/CEC my $typetp; if ( $type eq SERVICE_BPA ) @@ -2188,37 +2200,9 @@ sub parse_responses { } my $hostname = undef; if ( $type eq SERVICE_BPA or $type eq SERVICE_FSP ) { - - ########################################### - # begin to define frame and cec - # As default, use Server-$result[1]-SN$result[2] as hostname - # put the definitions into %outhash - ########################################### - $hostname = undef; - $host = "Server-$result[1]-SN$result[2]"; - unless ( exists( $outhash{$host} )) - { - if ( $type eq SERVICE_BPA ) - { - $result[0] = TYPE_FRAME; - } - else - { - $result[0] = TYPE_CEC; - } - # IP of frame and cec should be null - $result[3] = ""; - # side of frame and cec should be null - $result[4] = ""; - push @result, $rsp; - $hostname = gethost_from_url_or_old($host, $result[0], $result[1], $result[2], - $result[3],$result[4], $result[8],$result[5],$result[6]); - if ( $hostname ) - { - $outhash{$hostname} = \@result; - } - } - + + trace( $request, "........First begin to define FSP/BPA nodes", 1 ); + trace( $request, " we will keep the datas here first", 1); ########################################### # begin to define fsp/bpa, use ip as the hostname of the fsp/bpa # for there are redundancy of fsp/bpa, @@ -2260,6 +2244,8 @@ sub parse_responses { } $otherinterfacehash{$hostname}{otherinterfaces} = $ips[0]; + trace( $request, " Keep the node ip $ips[0] in its otherinterfaces", 1 ); + trace( $request, " The node $ips[0] match the old data and got the new name $hostname" , 1); #begin to define another fsp/bpa $hostname = undef; foreach (@result) { @@ -2279,12 +2265,48 @@ sub parse_responses { $$length = length( $severnode2[4] ); } $otherinterfacehash{$hostname}{otherinterfaces} = $ips[1]; + trace( $request, " Keep the node ip $ips[1] in its otherinterfaces" , 1); + trace( $request, " The node $ips[1] match the old data and got the new name $hostname" , 1); + + ########################################### + # begin to define frame and cec + # As default, use Server-$result[1]-SN$result[2] as hostname + # put the definitions into %outhash + ########################################### + + trace( $request, "........second begin to define frame and cec " , 1); + $hostname = undef; + $host = "Server-$result[1]-SN$result[2]"; + unless ( exists( $outhash{$host} )) + { + if ( $type eq SERVICE_BPA ) + { + $result[0] = TYPE_FRAME; + } + else + { + $result[0] = TYPE_CEC; + } + # IP of frame and cec should be null + $result[3] = ""; + # side of frame and cec should be null + $result[4] = ""; + push @result, $rsp; + $hostname = gethost_from_url_or_old($host, $result[0], $result[1], $result[2], + $result[3],$result[4], $result[8],$result[5],$result[6]); + if ( $hostname ) + { + $outhash{$hostname} = \@result; + } + trace( $request, " the node $host match the old data and got the new name $hostname " , 1); + } + } else { ########################################### # for HMC ########################################### - + trace( $request, "........begin to define hmc ", 1); $host = gethost_from_url( $request, $rsp, @result); if ( !defined( $host )) { next; @@ -2327,6 +2349,7 @@ sub parse_responses { ############################################################ # find out the cageid for the cec ############################################################ + trace( $request, "\n\n.......the cageid need to be adjust,because some secondary fsp return wrong side value ( always 0)", 1); foreach my $idtmp( keys(%fid1) ) { if ($fid1{$idtmp} > 0) @@ -2350,6 +2373,7 @@ sub parse_responses { ############################################################ # -n flag to skip the existing node ############################################################ + trace( $request, "\n\ncheck if there is -n, and skip the existing nodes ", 1); my %vpd_table_hash; my $vpdtab = xCAT::Table->new( 'vpd' ); my @entries = $vpdtab->getAllNodeAttribs(['node','mtm','serial','side']); @@ -2375,6 +2399,7 @@ sub parse_responses { my %hash = (); my $mac; my $parent; + trace( $request, "\n\n\n Begin to parse these datas second time: ", 1); foreach my $h ( keys %outhash ) { my $data = $outhash{$h}; my $type = @$data[0]; @@ -2390,7 +2415,7 @@ sub parse_responses { my $bpamtm = @$data[5]; my $bpasn = @$data[6]; my $cagenum = @$data[8]; - + trace( $request, ">>>>>>>>The node is $h, type is $type, mtm is $mtm, sn is $sn, side is $side, ip is $ip0, bpamtm is $bpamtm, bpasn is $bpasn, cagenum is $cagenum", 1); # find cageid for the secondary fsp node if ( $type =~ /^FSP$/ || $type =~ /^CEC$/) { @$data[8] = $cid{$mtm."*".$sn}; @@ -2401,6 +2426,7 @@ sub parse_responses { if ( exists $vpd_table_hash{$mtm . '*' . $sn . '-' . $side} ) { my $existing_node = $vpd_table_hash{$mtm . '*' . $sn . '-' . $side}; if ( exists $nodehm_table_hash{$existing_node} ) { + trace ( $request, " This node is exites, so skipped. ", 1); next; } } @@ -2436,7 +2462,7 @@ sub parse_responses { } push @$data, $parent; - + trace ( $request, " Then find the node's parent $parent.", 1); #find the mac address if ( $type ne TYPE_FRAME and $type ne TYPE_CEC ) {# the ips of frame and cec are null @@ -2445,16 +2471,20 @@ sub parse_responses { $mac = undef; } push @$data, $mac; + trace ( $request, " Then find the node's mac $mac.", 1); + + # have got node's parent and id, need to match fsp here - if ( $type eq TYPE_FSP and $parent and @$data[8]) + trace ( $request, " Need to find new name for the fsp/bpa with parent $parent and id @$data[8].", 1); + if ( $type eq TYPE_FSP and $parent) { $newname = gethost_from_url_or_old($h, $type, undef, undef, undef, undef, @$data[8], undef, undef, $parent) } # have got node's parent, need to match bpa here - if ( $type eq TYPE_FSP and $parent and @$data[8]) + if ( $type eq TYPE_BPA and $parent) { $newname = gethost_from_url_or_old($h, $type, undef, undef, undef, undef, undef, undef, undef, $parent) @@ -2463,10 +2493,12 @@ sub parse_responses { if ($newname) { + trace ( $request, " The new name is $newname.", 1); $hash{$newname} = $data; } else { + trace ( $request, " The new name is $h.", 1); $hash{$h} = $data; } }