more on node status monitoring

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2258 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
linggao 2008-09-29 14:53:58 +00:00
parent 191d8468d6
commit d1175084d6
5 changed files with 28 additions and 6 deletions

View File

@ -37,11 +37,12 @@ $::STATUS_DISCOVERING="discovering";
$::STATUS_DEFINED="defined";
$::STATUS_UNKNOWN="unknown";
#defined->[discovering]->installing->booting->booted->alive, defined->netbooting->booted->alive, alive/unreachable->booting->booted->alive, powering-off->unreachable, alive->unreachable
#defined->[discovering]->installing->installed->booting->alive, defined->netbooting->booted->alive, alive/unreachable->booting->alive, powering-off->unreachable, alive->unreachable
%::NEXT_NODESTAT_VAL=(
$::STATUS_DEFINED=>{$::STATUS_DISCOVERING=>1, $::STATUS_INSTALLING=>1, $::STATUS_NETBOOTING=>1, $::STATUS_POWERING_OFF=>1, $::STATUS_BOOTING=>1},
$::STATUS_DISCOVERING=>{$::STATUS_INSTALLING=>1},
$::STATUS_INSTALLING =>{$::STATUS_BOOTING=>1},
$::STATUS_DISCOVERING=>{$::STATUS_INSTALLING=>1, $::STATUS_BOOTING=>1},
$::STATUS_INSTALLING =>{$::STATUS_INSTALLED=>1, $::STATUS_DISCOVERING=>1},
$::STATUS_INSTALLED =>{$::STATUS_BOOTING=>1},
$::STATUS_BOOTING=>{$::STATUS_BOOTED=>1,$::STATUS_ACTIVE=>1, $::STATUS_INACTIVE=>1},
$::STATUS_NETBOOTING=>{$::STATUS_BOOTED=>1},
$::STATUS_BOOTED=>{$::STATUS_ACTIVE=>1, $::STATUS_INACTIVE=>1},

View File

@ -263,7 +263,7 @@ nodelist => {
descriptions => {
node => 'The hostname of a node in the cluster.',
groups => "A comma-delimited list of groups this node is a member of. Group names are arbitrary, except all nodes should be part of the 'all' group.",
status => 'The current status of this node. This attribute will be set by xCAT software. Valid values: defined, booting, netbooting, booted, discovering, installing, alive, powering-off, unreachable. The default value is defined. The possible status change sequenses are: defined->[discovering]->installing->booting->booted->alive, defined->netbooting->booted->alive, alive/unreachable->booting->booted->alive, alive->powering-off->unreachable, alive->unreachable',
status => 'The current status of this node. This attribute will be set by xCAT software. Valid values: defined, booting, netbooting, booted, discovering, installing, alive, powering-off, unreachable. The default value is defined. The possible status change sequenses are: defined->[discovering]->installing->installed->booting->alive, defined->netbooting->booted->alive, alive/unreachable->booting->alive, alive->powering-off->unreachable, alive->unreachable',
appstatus => "A comma-delimited list monitored applications that are active on the node. For example 'sshd,rmcd,gmond",
comments => 'Any user-written notes.',
disable => "Set to 'yes' or '1' to comment out this row.",

View File

@ -578,6 +578,7 @@ sub setNodeStatusAttributes {
}
my $force=shift;
my $tab = xCAT::Table->new('nodelist',-create=>0,-autocommit=>1);
my $nttab = xCAT::Table->new('nodetype',-create=>0,-autocommit=>1);
my %status_hash=%$temp;
@ -588,12 +589,22 @@ sub setNodeStatusAttributes {
my $nodes=$status_hash{$s};
if ($nodes && (@$nodes>0)) {
my $tabdata=$tab->getNodesAttribs($nodes,['node', 'status']);
my $nttabdata=$nttab->getNodesAttribs($nodes,['node', 'nodetype']);
foreach my $node (@$nodes) {
my $tmp1=$tabdata->{$node}->[0];
if ($tmp1) {
my $status=$tmp1->{status};
if (!$status) {$status=$::STATUS_DEFINED; } #default is 'defined'
if ($::NEXT_NODESTAT_VAL{$status}->{$s}==1) { push(@new_nodes,$node); }
if ($::NEXT_NODESTAT_VAL{$status}->{$s}==1) { push(@new_nodes,$node); }
else {
#for non-osi type, always change
my $type;
my $nttmp1=$nttabdata->{$node}->[0];
if ($nttmp1) {
$type=$nttmp1->{nodetype};
}
if ((!$type) || ($type !~ /osi/)) {push(@new_nodes,$node);}
}
}
}
}
@ -618,6 +629,7 @@ sub setNodeStatusAttributes {
}
$tab->close;
$nttab->close;
return 0;
}

View File

@ -308,6 +308,9 @@ sub getMonNodesStatus {
foreach(@$monnodes) {
my $node=$_->[0];
my $status=$_->[2];
my $type=$_[1];
if (!$status) { $status=$::STATUS_DEFINED;} #default
if ($status eq $::STATUS_ACTIVE) { push(@active_nodes, $node);}
elsif ($status eq $::STATUS_INACTIVE) { push(@inactive_nodes, $node);}
else {
@ -318,6 +321,10 @@ sub getMonNodesStatus {
if (($need_active==1) && ($need_inactive==0)) { push(@inactive_nodes, $node); } #put it into the inactive list so that the monitoring code can switch it to active.
elsif (($need_active==0) && ($need_inactive==1)) { push(@active_nodes, $node); } #put it into the active list so that the monitoring code can chane it to inactive.
elsif (($need_active==1) && ($need_inactive==1)) { push(@unknown_nodes, $node);} #unknow list so that the monitoring code can change it to active or inactive
else {
#if it is non-osi node, check it anyway
if ($type !~ /osi/) {push(@unknown_nodes, $node);}
}
}
}
}

View File

@ -56,7 +56,9 @@ if (@changed_inactive>0) {
#only set the node status for the changed ones
if (keys(%node_status) > 0) {
xCAT_monitoring::xcatmon::setNodeStatusAttributes(\%node_status);
#the second parameter means ignore checking. This is because the check is
#done getMonNodesStatus() call
xCAT_monitoring::xcatmon::setNodeStatusAttributes(\%node_status, 1);
}
#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);