From 182e950bf52066dc74037b0be66c1818c01cfe2c Mon Sep 17 00:00:00 2001 From: "Leigh B. Stoller" <stoller@flux.utah.edu> Date: Mon, 24 Jun 2002 20:27:29 +0000 Subject: [PATCH] Hmm, forgot to commit the node_update changes that switch to a client initiated model for updating remote nodes. --- tbsetup/node_update.in | 61 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/tbsetup/node_update.in b/tbsetup/node_update.in index d39e38b021..7a6556f2ac 100644 --- a/tbsetup/node_update.in +++ b/tbsetup/node_update.in @@ -88,6 +88,7 @@ my $logname; my %pids = (); my $failed = 0; my $dbuid; +my @remotenodes = (); # # We don't want to run this script unless its the real version. @@ -195,6 +196,24 @@ if (! @nodes) { fatal("No Nodes in the experiment"); } +# +# For widearea nodes, just update flag them in the DB. The nodes will +# notice this and suck the data over when they can. +# +foreach my $node ( @nodes ) { + if (TBIsNodeRemote($node) && !TBIsNodeVirtual($node)) { + print STDOUT "Marking widearea node $node for update.\n"; + + # + # No point in incrementing the flag past 2! + # + DBQueryFatal("update nodes set update_accounts=update_accounts+1 ". + "where node_id='$node' and update_accounts<2"); + + push(@remotenodes, $node); + } +} + # # We want some overlap, but not too much since we could burn up # a lot processes on wedged nodes. Issue a small number in parallel, @@ -203,6 +222,13 @@ if (! @nodes) { # my $maxpids = 0; foreach my $node ( @nodes ) { + # + # Remote nodes handled just above. + # + if (TBIsNodeRemote($node) || TBIsNodeVirtual($node)) { + next; + } + while ($maxpids >= $maxchildren) { my $thispid = waitpid(-1, 0); my $thisnode = $pids{$thispid}; @@ -212,7 +238,7 @@ foreach my $node ( @nodes ) { print STDERR "Update of node $thisnode failed!\n"; } else { - print STDOUT "$thisnode updated ...\n"; + print STDOUT "$thisnode updated.\n"; } delete($pids{$thispid}); @@ -236,7 +262,36 @@ foreach my $thispid ( keys(%pids) ) { print STDERR "Update of node $node failed!\n"; } else { - print STDOUT "$node updated ...\n"; + print STDOUT "$node updated.\n"; + } +} + +# +# Wait a couple of minutes for remote nodes to do the update. We know +# this cause tmcd decrements the update_accounts flag whenever a node +# picks up new accounts. +# +if (@remotenodes) { + print STDOUT "Waiting a while for widearea nodes to update ...\n"; + sleep(90); + my $foo = pop(@remotenodes); + my $str = "node_id='$foo' "; + + foreach my $node ( @remotenodes ) { + $str .= "or node_id='$node' "; + } + my $query_result = + DBQueryFatal("select node_id,update_accounts from nodes ". + "where ($str)"); + + while (my ($node,$notdone) = $query_result->fetchrow_array) { + if ($notdone) { + $failed++; + print STDERR "Update of node $node has not completed!\n"; + } + else { + print STDOUT "$node updated.\n"; + } } } @@ -255,7 +310,7 @@ sub UpdateNode { my($node) = @_; my($syspid, $mypid); - print STDOUT "Updating $node ...\n"; + print STDOUT "Updating $node.\n"; # # We need to know if its a remote or local node, so we know how -- GitLab