From 69c166ab5dbae3ac325dd6dc82f73a6acf95fd5c Mon Sep 17 00:00:00 2001 From: mellor Date: Mon, 22 Nov 2010 22:17:39 +0000 Subject: [PATCH] rollupdate - remove workarounds and use new llconfig -N option git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@8235 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/rollupdate.pm | 146 +++++++++++---------- 1 file changed, 79 insertions(+), 67 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/rollupdate.pm b/xCAT-server/lib/xcat/plugins/rollupdate.pm index 8c1698e8a..4bde5add8 100644 --- a/xCAT-server/lib/xcat/plugins/rollupdate.pm +++ b/xCAT-server/lib/xcat/plugins/rollupdate.pm @@ -1251,7 +1251,7 @@ sub set_LL_feature { # Change in LL database foreach my $sf (keys %set_features) { if ($set_features{$sf} !~ /^\s*$/){ - $cmd = "llconfig -h $set_features{$sf} -c FEATURE=\"$sf\""; + $cmd = "llconfig -N -h $set_features{$sf} -c FEATURE=\"$sf\""; if ($::VERBOSE) { open (RULOG, ">>$::LOGDIR/$::LOGFILE"); print RULOG localtime()." Running command \'$cmd\'\n"; @@ -1264,10 +1264,6 @@ sub set_LL_feature { $::RUNCMD_RC = 0; } else { xCAT::Utils->runcmd( $cmd, 0 ); -### -### DEBUG -- llconfig problem -### workaround - sleep to let ll daemons catch up -sleep 3; if ($::VERBOSE) { open (RULOG, ">>$::LOGDIR/$::LOGFILE"); print RULOG localtime()." Return code: $::RUNCMD_RC\n"; @@ -1276,21 +1272,10 @@ sleep 3; } } } -### -### DEBUG -- llconfig problem -### need to send a manual reconfig to at least one node to have it -### register in LL daemons -### not working - try sleep above instead -#sleep 3; -# my @rcfns = split(/\s+/,$machinelist); -# my @rcfg = `ssh $rcfns[0] llrctl reconfig`; -# if ($::VERBOSE) { -# open (RULOG, ">>$::LOGDIR/$::LOGFILE"); -# print RULOG localtime()." llconfig workaround, run \"ssh $rcfns[0] llrctl reconfig \", output: \n"; -# print RULOG @rcfg; -# close (RULOG); -# } -### end DEBUG + + # Send LL reconfig to all central mgrs and resource mgrs + llreconfig(); + return 0; } @@ -1635,8 +1620,6 @@ mxnode_loop: foreach my $mxnode ( xCAT::NodeRange::noderange($mxnodegroup) ) { my @llcfg_d = xCAT::Utils->runcmd( $cmd, 0 ); my $curSCHED = ""; my $curFLOAT = ""; - my $llcms = ""; - my $llrms = ""; foreach my $cfgo (@llcfg_d) { chomp $cfgo; my($llattr,$llval) = split (/ = /,$cfgo); @@ -1644,12 +1627,8 @@ mxnode_loop: foreach my $mxnode ( xCAT::NodeRange::noderange($mxnodegroup) ) { $curSCHED = $llval; } if ( $llattr =~ /FLOATING_RESOURCES/ ) { $curFLOAT = $llval; } - if ( $llattr =~ /CENTRAL_MANAGER_LIST/ ) { - $llcms = $llval; } - if ( $llattr =~ /RESOURCE_MGR_LIST/ ) { - $llrms = $llval; } } - $cmd = "llconfig -c "; + $cmd = "llconfig -N -c "; $curFLOAT =~ s/XCATROLLINGUPDATE_MUTEX(\d)*\((\d)*\)//g; $curFLOAT =~ s/XCATROLLINGUPDATE_MAXUPDATES(\d)*\((\d)*\)//g; $curFLOAT .= $resource_string; @@ -1660,8 +1639,6 @@ mxnode_loop: foreach my $mxnode ( xCAT::NodeRange::noderange($mxnodegroup) ) { $curSCHED =~ s/XCATROLLINGUPDATE_MAXUPDATES(\d)*//g; $curSCHED .= $resource_string; $cmd .= "SCHEDULE_BY_RESOURCES=\"$curSCHED\" "; -# TODO -- WAITING ON LLCONFIG OPTION TO NOT SEND CFG CMD TO ALL -#### NODES. NEED TO CHANGE CMD WHEN AVAILABLE. my @llcfg_c; if ($::TEST) { my $rsp; @@ -1671,27 +1648,9 @@ mxnode_loop: foreach my $mxnode ( xCAT::NodeRange::noderange($mxnodegroup) ) { } else { @llcfg_c = xCAT::Utils->runcmd( $cmd, 0 ); } - $cmd = "llrctl reconfig"; - my @llms = split(/\s+/,$llcms." ".$llrms); - my %have = (); - my @llnodes; - foreach my $m (@llms) { - my ($sm,$rest) = split(/\./,$m); - push(@llnodes, $sm) unless $have{$sm}++; - } - if ($::TEST) { - my $rsp; - push @{ $rsp->{data} }, "In TEST mode. Will NOT run command: xdsh $cmd "; - xCAT::MsgUtils->message( "I", $rsp, $::CALLBACK ); - $::RUNCMD_RC = 0; - } else { - xCAT::Utils->runxcmd( - { command => ['xdsh'], - node => \@llnodes, - arg => [ "-v", $cmd ] - }, - $::SUBREQ, -1); - } + + # Send LL reconfig to all central mgrs and resource mgrs + llreconfig(); } $::LL_MUTEX_RESOURCES_CREATED = 1; @@ -2302,22 +2261,7 @@ sub remove_LL_reservations { } } } -### -### DEBUG -- llconfig problem -### need to send a manual reconfig to at least one node to have it -### register in LL daemons -### not working - try sleep instead -sleep 3; -# my $n1 = $nodes->[0]; -# my @rcfg = `ssh $n1 llrctl reconfig`; -# if ($::VERBOSE) { -# open (RULOG, ">>$::LOGDIR/$::LOGFILE"); -# print RULOG localtime()." llconfig workaround, run \"ssh $n1 llrctl reconfig \", output: \n"; -# print RULOG @rcfg; -# close (RULOG); -# } -### end DEBUG - # Verify that the config change has been registerd and that updatefeature + # Verify that the config change has been registered and that updatefeature # has been removed according to what the LL daemons report if (defined($::DATAATTRS{updatefeature}[0])) { my $machinelist = join(" ",@{$nodes}); @@ -2458,7 +2402,7 @@ sub change_LL_feature { } } # Change in LL database - $cmd = "llconfig -h $node -c FEATURE=\"$newfeature_string\""; + $cmd = "llconfig -N -h $node -c FEATURE=\"$newfeature_string\""; if ($::VERBOSE) { open (RULOG, ">>$::LOGDIR/$::LOGFILE"); print RULOG localtime()." $::ug_name: Running command \'$cmd\'\n"; @@ -2471,9 +2415,77 @@ sub change_LL_feature { close (RULOG); } + # Send LL reconfig to all central mgrs and resource mgrs + llreconfig(); + return 0; } + +#---------------------------------------------------------------------------- + +=head3 llreconfig + + Queries LoadLeveler for the list of central mgrs and resource mgrs + and sends a llrctl reconfig to those nodes + + Arguments: + Returns: + 0 - OK + 1 - error + Globals: + Error: + Example: + + Comments: + +=cut + +#----------------------------------------------------------------------------- +sub llreconfig { + + # Send LL reconfig to all central mgrs and resource mgrs + my $cmd = "llconfig -d CENTRAL_MANAGER_LIST RESOURCE_MGR_LIST"; + my @llcfg_d = xCAT::Utils->runcmd( $cmd, 0 ); + my $llcms = ""; + my $llrms = ""; + foreach my $cfgo (@llcfg_d) { + chomp $cfgo; + my($llattr,$llval) = split (/ = /,$cfgo); + if ( $llattr =~ /CENTRAL_MANAGER_LIST/ ) { + $llcms = $llval; } + if ( $llattr =~ /RESOURCE_MGR_LIST/ ) { + $llrms = $llval; } + } + $cmd = "llrctl reconfig"; + my @llms = split(/\s+/,$llcms." ".$llrms); + my %have = (); + my @llnodes; + foreach my $m (@llms) { + my ($sm,$rest) = split(/\./,$m); + push(@llnodes, $sm) unless $have{$sm}++; + } + if ($::VERBOSE) { + open (RULOG, ">>$::LOGDIR/$::LOGFILE"); + print RULOG localtime()." Running command \'xdsh $llcms $llrms $cmd\'\n"; + close (RULOG); + } + if ($::TEST) { + my $rsp; + push @{ $rsp->{data} }, "In TEST mode. Will NOT run command: xdsh $cmd "; + xCAT::MsgUtils->message( "I", $rsp, $::CALLBACK ); + $::RUNCMD_RC = 0; + } else { + xCAT::Utils->runxcmd( + { command => ['xdsh'], + node => \@llnodes, + arg => [ "-v", $cmd ] + }, + $::SUBREQ, -1); + } + +} + 1;