Made performance improvement of writing db.
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@13603 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -1256,20 +1256,17 @@ sub xCATdB { | ||||
|     my $outhash = shift; | ||||
|  | ||||
|     ######################################## | ||||
|     # Update database if the name changed | ||||
|     ######################################## | ||||
|     my %db       = (); | ||||
|     my @tabs     = qw(nodelist ppc vpd nodehm nodetype ppcdirect hosts mac mp); | ||||
|     foreach ( @tabs ) { | ||||
|         $db{$_} = xCAT::Table->new( $_); | ||||
|         if ( !$db{$_} ) { | ||||
|             return( "Error opening '$_'" ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     ######################################## | ||||
|     # Begin to write each node | ||||
|     # Begin to collect attributes for each node | ||||
|     ######################################## | ||||
|     my %nodelisthash; | ||||
|     my %ppchash; | ||||
|     my %vpdhash; | ||||
|     my %nodehmhash; | ||||
|     my %nodetypehash; | ||||
|     my %ppcdirecthash; | ||||
|     my %hostshash; | ||||
|     my %machash; | ||||
|     my %mphash; | ||||
|     foreach my $nodeentry ( keys %$outhash ) { | ||||
|         my $type       = ${$outhash->{$nodeentry}}{type}; | ||||
|         my $model      = ${$outhash->{$nodeentry}}{mtm}; | ||||
| @@ -1289,36 +1286,56 @@ sub xCATdB { | ||||
|         # Write result to every tables, | ||||
|         ######################################## | ||||
|         if ( $type =~ /^bpa|fsp|cec|frame$/ ) { | ||||
|             $db{nodelist}->setNodeAttribs($hostname,{node=>$hostname, groups=>"$type,all", hidden=>$hidden}); | ||||
|             $db{ppc}->setNodeAttribs($hostname,{node=>$hostname, id=>$id, parent=>$parent, hcp=>$hostname, nodetype=>$globalhwtype{$type}}); | ||||
|             $db{vpd}->setNodeAttribs($hostname,{mtm=>$model, serial=>$serial, side=>$side}); | ||||
|             $db{nodehm}->setNodeAttribs($hostname,{mgt=>$globalmgt{$type}}); | ||||
|             $db{nodetype}->setNodeAttribs($hostname,{nodetype=>$globalnodetype{$type}}); | ||||
|             $db{hosts}->setNodeAttribs($hostname,{otherinterfaces=>$otherif}) if ($type =~ /fsp|bpa/); | ||||
|             $db{mac}->setNodeAttribs($hostname,{mac=>$mac}) if ($type =~ /^fsp|bpa$/); | ||||
|             $nodelisthash{$hostname} = {groups=>"$type,all", hidden=>$hidden}; | ||||
|             $ppchash{$hostname} = {id=>$id, parent=>$parent, hcp=>$hostname, nodetype=>$globalhwtype{$type}}; | ||||
|             $vpdhash{$hostname} = {mtm=>$model, serial=>$serial, side=>$side}; | ||||
|             $nodehmhash{$hostname} = {mgt=>$globalmgt{$type}}; | ||||
|             $nodetypehash{$hostname} = {nodetype=>$globalnodetype{$type}}; | ||||
|             $hostshash{$hostname} = {otherinterfaces=>$otherif} if ($type =~ /fsp|bpa/); | ||||
|             $machash{$hostname} = {mac=>$mac} if ($type =~ /^fsp|bpa$/);            | ||||
|         } elsif ( $type =~ /^(rsa|mm)$/ ) { | ||||
|             my @data = ($type, $model, $serial, $side, $ip, $frameid, $cageid, $parent, $mac); | ||||
|             xCAT::PPCdb::add_systemX( $type, $hostname, \@data ); | ||||
|         } elsif ( $type =~ /^(hmc|ivm)$/ ) { | ||||
|             $db{nodelist}->setNodeAttribs($hostname,{node=>$hostname, groups=>"$type,all", hidden=>$hidden}); | ||||
|             $db{ppc}->setNodeAttribs($hostname,{node=>$hostname, nodetype=>$globalhwtype{$type}}); | ||||
|             $db{vpd}->setNodeAttribs($hostname,{mtm=>$model, serial=>$serial}); | ||||
|             $db{nodetype}->setNodeAttribs($hostname,{nodetype=>$globalnodetype{$type}}); | ||||
|             $db{nodehm}->setNodeAttribs($hostname,{mgt=>$globalmgt{$type}}); | ||||
|             $db{hosts}->setNodeAttribs($hostname,{ip=>$ip}); | ||||
|             $db{mac}->setNodeAttribs($hostname,{mac=>$mac}); | ||||
|             $nodelisthash{$hostname} = {groups=>"$type,all", hidden=>$hidden}; | ||||
|             $ppchash{$hostname} = {nodetype=>$globalhwtype{$type}}; | ||||
|             $vpdhash{$hostname} = {mtm=>$model, serial=>$serial}; | ||||
|             $nodetypehash{$hostname} = {nodetype=>$globalnodetype{$type}}; | ||||
|             $nodehmhash{$hostname} = {mgt=>$globalmgt{$type}}; | ||||
|             $hostshash{$hostname} = {ip=>$ip}; | ||||
|             $machash{$hostname} = {mac=>$mac}; | ||||
|         }elsif ($type =~ /^cmm$/){ | ||||
|             $db{nodelist}->setNodeAttribs($hostname,{node=>$hostname, groups=>"cmm,all", hidden=>$hidden}); | ||||
|             $db{vpd}->setNodeAttribs($hostname,{mtm=>$model, serial=>$serial}); | ||||
|             $db{nodetype}->setNodeAttribs($hostname,{nodetype=>$globalnodetype{$type}}); | ||||
|             $db{nodehm}->setNodeAttribs($hostname,{mgt=>"blade"}); | ||||
|             $db{mp}->setNodeAttribs($hostname,{nodetype=>$globalhwtype{$type}, mpa=>$hostname, id=>$side}); | ||||
|             $db{hosts}->setNodeAttribs($hostname,{otherinterfaces=>$otherif}); | ||||
|             $nodelisthash{$hostname} = {groups=>"cmm,all", hidden=>$hidden}; | ||||
|             $vpdhash{$hostname} = {mtm=>$model, serial=>$serial}; | ||||
|             $nodetypehash{$hostname} = {nodetype=>$globalnodetype{$type}}; | ||||
|             $nodehmhash{$hostname} = {mgt=>"blade"}; | ||||
|             $mphash{$hostname} = {nodetype=>$globalhwtype{$type}, mpa=>$hostname, id=>$side}; | ||||
|             $hostshash{$hostname} = {otherinterfaces=>$otherif}; | ||||
|         } | ||||
|     } | ||||
|     foreach ( @tabs ) { | ||||
|         $db{$_}->close(); | ||||
|     } | ||||
|     ######################################## | ||||
|     # Update database  | ||||
|     ######################################## | ||||
|     my %dbhash; | ||||
|     $dbhash{nodelist} = \%nodelisthash, if (%nodelisthash); | ||||
|     $dbhash{ppc} = \%ppchash, if (%ppchash); | ||||
|     $dbhash{vpd} = \%vpdhash, if (%vpdhash); | ||||
|     $dbhash{nodehm} = \%nodehmhash, if (%nodehmhash); | ||||
|     $dbhash{nodetype} = \%nodetypehash, if (%nodetypehash); | ||||
|     $dbhash{ppcdirect} = \%ppcdirecthash, if (%ppcdirecthash); | ||||
|     $dbhash{hosts} = \%hostshash, if (%hostshash); | ||||
|     $dbhash{mac} = \%machash, if (%machash); | ||||
|     $dbhash{mp} = \%mphash, if (%mphash); | ||||
|    | ||||
|      | ||||
|     for my $tab (keys %dbhash) { | ||||
|         my $db = xCAT::Table->new($tab); | ||||
|         if ( !$db ) { | ||||
|             return( "Error opening $db" ); | ||||
|         } | ||||
|         $db->setNodesAttribs($dbhash{$tab}); | ||||
|         $db->close(); | ||||
|     }     | ||||
| } | ||||
| ########################################################################## | ||||
| # Stanza formatting | ||||
|   | ||||
		Reference in New Issue
	
	Block a user