From dcc1750c481f32db31f2ec5307383d7b90a07cb9 Mon Sep 17 00:00:00 2001 From: nott Date: Tue, 2 Oct 2012 17:52:47 +0000 Subject: [PATCH] fix cp cmd for copying client_data files git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@13932 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/snmove.pm | 57 ++++++++++++++++++++------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/snmove.pm b/xCAT-server/lib/xcat/plugins/snmove.pm index df88e6cd0..d7de746e1 100644 --- a/xCAT-server/lib/xcat/plugins/snmove.pm +++ b/xCAT-server/lib/xcat/plugins/snmove.pm @@ -116,6 +116,7 @@ sub process_request 'd|dest=s' => \$::SN2, # dest SN akb MN 'D|destn=s' => \$::SN2N, # dest SN akb node 'l|liteonly' => \$::SLonly, # update statelite only! + 'n|noretarget' => \$::NORETARGET, # no dump retarget 'P|postscripts=s' => \$::POST, # postscripts to be run 'i|ignorenodes' => \$::IGNORE, 'V|verbose' => \$::VERBOSE, @@ -890,6 +891,23 @@ sub process_request } $nimtab->close(); + # need a list of nodes for each SN + # - the nodes that have this SN as their primary SN + my %SNnodes; + my $nrtab = xCAT::Table->new('noderes'); + my $nrhash; + if ($nrtab) + { + $nrhash = $nrtab->getNodesAttribs(\@nodes, ['xcatmaster', 'servicenode']); + } + $nrtab->close(); + + foreach my $node (@nodes) + { + my ($snode, $junk) = (split /,/, $nrhash->{$node}->[0]->{'servicenode'}); + push(@{$SNnodes{$snode}}, $node); + } + # now try to restore any backup client data # for each service node @@ -927,8 +945,11 @@ sub process_request # restore file on node by node basis # we don't want all the files! - # - just the ones we are moving - foreach my $nd (@nodes) { + # we need to process only the nodes that have this SN as + # their primary + my @nodelist = @{$SNnodes{$s}}; + + foreach my $nd (@nodelist) { $nd =~ s/\..*$//; @@ -947,10 +968,19 @@ sub process_request $filestring .= "$bkloc/$file "; } } - my $ccmd=qq~/usr/bin/cp -p -r $filestring $cdloc 2>/dev/null~; + + if (!$filestring) { + my $rsp; + push @{$rsp->{data}}, "No backup client_data files for node $nd in $bkloc. Current client data files in $cdloc should be checked to avoid boot errors.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + $error++; + next; + } + + my $ccmd=qq~/usr/bin/cp -p $filestring $cdloc 2>/dev/null~; if ($::VERBOSE) { my $rsp; - push @{$rsp->{data}}, "Copying files from $bkloc to $cdloc on $s.\n"; + push @{$rsp->{data}}, "Running \'$ccmd\' on $s.\n"; xCAT::MsgUtils->message("I", $rsp, $callback); } @@ -958,7 +988,8 @@ sub process_request if ($::RUNCMD_RC != 0) { my $rsp; - push @{$rsp->{data}}, "Could not copy files to $cdloc.\n"; + push @{$rsp->{data}}, "Could not copy\n$filestring\n\tto $cdloc.\n"; + push @{$rsp->{data}}, "Command output:\n$output\n"; xCAT::MsgUtils->message("E", $rsp, $callback); $error++; } @@ -972,13 +1003,15 @@ sub process_request # if ((!$::IGNORE) && ($::isaix) && ($sharedinstall eq "sns")) { - if (&dump_retarget($callback, \@nodes, $sub_req) != 0) - { - my $rsp; - push @{$rsp->{data}}, "One or more errors occured while attemping to re-target the dump device on cluster nodes.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - $error++; - } + if (!$::NORETARGET) { + if (&dump_retarget($callback, \@nodes, $sub_req) != 0) + { + my $rsp; + push @{$rsp->{data}}, "One or more errors occured while attemping to re-target the dump device on cluster nodes.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + $error++; + } + } } #