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:
yinle 2012-08-24 07:13:47 +00:00
parent e5e92c55b8
commit dd42e9502d

View File

@ -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