move the switch info update and nodediscoverydata update before the final communication for restart to avoid the sock missing

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@15861 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
daniceexi 2013-04-08 06:37:08 +00:00
parent 002c6f54d5
commit be14247f0e

View File

@ -271,6 +271,63 @@ sub process_request {
$chaintab->close();
}
# Update the switch port information if the 'updateswitch' flag is added in the request.
# 'updateswitch' is default added for sequential discovery
if ($request->{'updateswitch'} && $macstring) {
my $firstmac;
# Get the mac which defined as the management nic
my @macents = split (/\|/, $macstring);
foreach my $macent (@macents) {
my ($mac, $host) = split (/!/, $macent);
unless ($firstmac) {
$firstmac = $mac;
}
if ($host eq $node) {
$firstmac = $mac;
last;
}
}
# search the management nic and record the switch informaiton
foreach my $nic (@{$request->{nic}}) {
if (defined ($nic->{'hwaddr'}) && $nic->{'hwaddr'}->[0] =~ /$firstmac/i ) {
if (defined ($nic->{'switchname'}) && defined ($nic->{'switchaddr'})) {
# update the switch to switches table
my $switchestab = xCAT::Table->new('switches');
if ($switchestab) {
$switchestab->setAttribs({switch=>$nic->{'switchname'}->[0]}, {comments=>$nic->{'switchdesc'}->[0]});
$switchestab->close();
}
# update the ip of switch to hosts table
my $hosttab = xCAT::Table->new('hosts');
if ($hosttab) {
$hosttab->setNodeAttribs($nic->{'switchname'}->[0], {ip => $nic->{'switchaddr'}->[0]});
$hosttab->commit();
}
# add the switch as a node to xcat db
my $nltab = xCAT::Table->new('nodelist');
if ($nltab) {
$nltab->setNodeAttribs($nic->{'switchname'}->[0], {groups=>"all,switch"});
$nltab->commit();
}
if (defined ($nic->{'switchport'})) {
# update the switch table
my $switchtab = xCAT::Table->new('switch');
if ($switchtab) {
$switchtab->setNodeAttribs($node, {switch=>$nic->{'switchname'}->[0], port=>$nic->{'switchport'}->[0]});
$switchtab->close();
}
}
}
}
}
}
#Update the discoverydata table to indicate the successful discovery
xCAT::DiscoveryUtils->update_discovery_data($request);
my $restartstring = "restart";
if (scalar @forcenics > 0) {
@ -282,70 +339,12 @@ sub process_request {
PeerPort => '3001',
Timeout => '1',
Proto => 'tcp'
);
unless ($sock) { syslog("err","Failed to notify $ip that it's actually $node."); return; } #Give up if the node won't hear of it.
print $sock $restartstring;
close($sock);
);
unless ($sock) { syslog("err","Failed to notify $ip that it's actually $node."); return; } #Give up if the node won't hear of it.
print $sock $restartstring;
close($sock);
# Update the switch port information if the 'updateswitch' flag is added in the request.
# 'updateswitch' is default added for sequential discovery
if ($request->{'updateswitch'} && $macstring) {
my $firstmac;
# Get the mac which defined as the management nic
my @macents = split (/\|/, $macstring);
foreach my $macent (@macents) {
my ($mac, $host) = split (/!/, $macent);
unless ($firstmac) {
$firstmac = $mac;
}
if ($host eq $node) {
$firstmac = $mac;
last;
}
}
# search the management nic and record the switch informaiton
foreach my $nic (@{$request->{nic}}) {
if (defined ($nic->{'hwaddr'}) && $nic->{'hwaddr'}->[0] =~ /$firstmac/i ) {
if (defined ($nic->{'switchname'}) && defined ($nic->{'switchaddr'})) {
# update the switch to switches table
my $switchestab = xCAT::Table->new('switches');
if ($switchestab) {
$switchestab->setAttribs({switch=>$nic->{'switchname'}->[0]}, {comments=>$nic->{'switchdesc'}->[0]});
$switchestab->close();
}
# update the ip of switch to hosts table
my $hosttab = xCAT::Table->new('hosts');
if ($hosttab) {
$hosttab->setNodeAttribs($nic->{'switchname'}->[0], {ip => $nic->{'switchaddr'}->[0]});
$hosttab->commit();
}
# add the switch as a node to xcat db
my $nltab = xCAT::Table->new('nodelist');
if ($nltab) {
$nltab->setNodeAttribs($nic->{'switchname'}->[0], {groups=>"all,switch"});
$nltab->commit();
}
if (defined ($nic->{'switchport'})) {
# update the switch table
my $switchtab = xCAT::Table->new('switch');
if ($switchtab) {
$switchtab->setNodeAttribs($node, {switch=>$nic->{'switchname'}->[0], port=>$nic->{'switchport'}->[0]});
$switchtab->close();
}
}
}
}
}
}
#Update the discoverydata table to indicate the successful discovery
xCAT::DiscoveryUtils->update_discovery_data($request);
syslog("info","$node has been discovered");
syslog("info","$node has been discovered");
}
1;