All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

Commit f3c23007 authored by Mike Hibler's avatar Mike Hibler

Merge remote branch 'mike/master' into tpm-tmcd

parents e9a222db 24903113
......@@ -137,6 +137,30 @@ sub updated($) { return field($_[0], "updated"); }
sub mbr_version($) { return field($_[0], "mbr_version"); }
sub access_key($) { return field($_[0], "access_key"); }
#
# Get a list of all running frisbee images.
#
sub ActiveImages($)
{
my ($class) = @_;
my @result = ();
my $query_result =
DBQueryWarn("select imageid from images where frisbee_pid!=0");
return undef
if (!defined($query_result));
while (my ($imageid) = $query_result->fetchrow_array()) {
my $image = Image->Lookup($imageid);
if (!defined($image)) {
print STDERR "*** Could not find DB object for image $imageid\n";
return undef;
}
push(@result, $image);
}
return \@result;
}
#
# Refresh a class instance by reloading from the DB.
#
......
#!/usr/bin/perl -wT
#!/usr/bin/perl -w
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2008 University of Utah and the Flux Group.
# Copyright (c) 2000-2010 University of Utah and the Flux Group.
# All rights reserved.
#
use English;
......@@ -200,12 +200,14 @@ if ($today == 7) {
if (! ($query_result =
DBQueryWarn("select n.node_id from nodes as n ".
"left join node_types as t on t.type=n.type ".
"left join reserved as r on r.node_id=n.node_id ".
"where (n.eventstate!='". TBDB_NODESTATE_ISUP ."' and ".
" n.eventstate!='". TBDB_NODESTATE_PXEWAIT ."' and ".
" n.eventstate!='". TBDB_NODESTATE_ALWAYSUP ."' and ".
" n.eventstate!='". TBDB_NODESTATE_POWEROFF ."') ".
" and r.pid is null and n.role='testnode'"))) {
" and r.pid is null and n.role='testnode' and ".
" t.isfednode=0"))) {
fatal("Error accessing the database.");
}
......
......@@ -2,7 +2,7 @@
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2007 University of Utah and the Flux Group.
# Copyright (c) 2000-2010 University of Utah and the Flux Group.
# All rights reserved.
#
......@@ -165,7 +165,7 @@ EOT
$time= $r{'idle_time'};
$lastact= $r{'lastact'};
$staleness = $r{'staleness'};
if ($staleness >= 600) { # 10 minute stale limit
if (!defined($staleness) || $staleness >= 600) { # 10 minute stale limit
$stale=1;
}
......@@ -283,7 +283,7 @@ EOT
$time= $r{'idle_time'};
$lastact= $r{'lastact'};
$staleness = $r{'staleness'};
if ($staleness >= 600) { # 10 minute stale limit
if (!defined($staleness) || $staleness >= 600) { # 10 minute stale limit
$stale=1;
}
SendMessage($pid,$pid,$eid,1,0,$nodes,$time,$lastact,$stale,
......@@ -363,7 +363,7 @@ EOT
$time= $r{'idle_time'};
$lastact= $r{'lastact'};
$staleness = $r{'staleness'};
if ($staleness >= 600) { # 10 minute stale limit
if (!defined($staleness) || $staleness >= 600) { # 10 minute stale limit
$stale=1;
}
......
......@@ -112,6 +112,7 @@ my $BATCHEXP = "$PREFIX/bin/batchexp";
my $NAMED_SETUP = "$PREFIX/sbin/named_setup";
my $ADDPUBKEY = "$PREFIX/sbin/addpubkey";
my $TBACCT = "$PREFIX/sbin/tbacct";
my $GENTOPOFILE = "$PREFIX/libexec/gentopofile";
my $WWWDIR = "$PREFIX/www";
my $CRACKLIB_DICT = "/usr/local/lib/pw_dict.pwd";
......@@ -1622,6 +1623,11 @@ Phase "experiments", "Setting up system experiments", sub {
" -L 'System Experiment' ".
" -E '$desc - DO NOT DELETE' ".
" -p $pid -e $eid");
#
# XXX create an empty topomap so that nodes booting up in
# one of these experiments won't fail in rc.topomap.
#
ExecQuiet("$SUDO -u $PROTOUSER $GENTOPOFILE $pid $eid");
};
}
};
......
......@@ -45,6 +45,7 @@ my $PGENISUPPORT = @PROTOGENI_SUPPORT@;
my $INSTALLUPDATE= "$TB/sbin/update-install";
my $SETSITEVAR = "$TB/sbin/setsitevar";
my $STARTUP = "/usr/local/etc/rc.d/3.testbed.sh";
my $FRISBEE = "$TB/sbin/frisbeelauncher";
my $tempfile = "/var/tmp/update.$$";
# Protos
......@@ -85,6 +86,7 @@ BEGIN
use emdb;
use libEmulab;
use libtestbed;
use Image;
#
# Parse command arguments.
......@@ -305,6 +307,23 @@ if ($stopbed) {
Fatal("Could not stop testbed daemons. Stopping.");
}
$stopped = 1;
my $activeimages = Image->ActiveImages();
if (defined($activeimages)) {
my @activeimages = @{ $activeimages };
if (@activeimages) {
print "** Stopping running frisbee processes ...\n";
}
foreach my $image (@activeimages) {
my $imageid = $image->imageid();
print "-> Killing frisbee for $image ...\n";
system("$FRISBEE -k $imageid");
if ($?) {
Fatal("Could not stop frisbee for $image!");
}
}
}
print "** Testbed is stopped. Proceeding to update\n";
#
......
#
# Create a null topomap for system experiments.
#
# This way, when a node happens to boot from disk while in one of these
# experiments (e.g., hwdown), it won't fail in rc.topomap. For new installs,
# this is now done by boss-install.
#
# Is this important? No, but it irritated me.
#
use strict;
use libinstall;
# XXX lifted from boss-install.in
my %EXPERIMENTS =
("hwdown" => {"pid" => "emulab-ops",
"description" => "Node reported as down"},
"reloading" => {"pid" => "emulab-ops",
"description" => "Nodes reloading images"},
"reloadpending" => {"pid" => "emulab-ops",
"description" => "Nodes waiting for reload"},
"oldreserved" => {"pid" => "emulab-ops",
"description" => "Nodes in limbo during swap modify"},
"nfree-leases" => {"pid" => "emulab-ops",
"description" => "Nodes in limbo during nfree"},
"nfree-locked" => {"pid" => "emulab-ops",
"description" => "Nodes in limbo during nfree"},
"opsnodes" => {"pid" => "emulab-ops",
"description" => "Nodes designated as Ops Nodes"},
"holding" => {"pid" => "emulab-ops",
"description" => "Nodes in a holding pattern"},
"shared-nodes" => {"pid" => "emulab-ops",
"description" => "Nodes in shared mode"},
"hwcheckup" => {"pid" => "emulab-ops",
"description" => "Nodes being testing after failure"},
);
my $SUDO = "/usr/local/bin/sudo";
my $GENTOPOFILE = "$TBROOT/libexec/gentopofile";
sub InstallUpdate($$)
{
my ($version, $phase) = @_;
#
# If something should run in the pre-install phase.
#
if ($phase eq "pre") {
Phase "gentopo", "Creating NULL topomap for system experiments", sub {
foreach my $eid (keys(%EXPERIMENTS)) {
my $pid = $EXPERIMENTS{$eid}->{"pid"};
ExecQuiet("$SUDO -u $PROTOUSER $GENTOPOFILE $pid $eid");
}
};
}
#
# If something should run in the post-install phase.
#
if ($phase eq "post") {
}
return 0;
}
1;
#
# Install new port, for ProtoGENI.
#
use strict;
use libinstall;
sub InstallUpdate($$)
{
my ($version, $phase) = @_;
#
# If something should run in the pre-install phase.
#
if ($phase eq "pre") {
Phase "p5-XML-SemanticDiff", "Checking for p5-XML-SemanticDiff", sub {
DoneIfPackageInstalled("p5-XML-SemanticDiff");
ExecQuietFatal("cd $PORTSDIR/textproc/p5-XML-SemanticDiff; ".
"make MASTER_SITE_FREEBSD=1 -DBATCH install");
};
}
#
# If something should run in the post-install phase.
#
if ($phase eq "post") {
}
return 0;
}
1;
......@@ -344,7 +344,6 @@ sub Version($)
else {
$self->{'version'} = $response->value()->{'api'};
$self->{'apilevel'} = $response->value()->{'level'};
$self->{'apilevel'} = 0;
$self->{'api'} = "CM";
}
}
......
......@@ -169,7 +169,7 @@ sub Create($$$$)
# For now, all tickets expire very quickly ...
#
$self->{'redeem_before'} =
POSIX::strftime("20%y-%m-%dT%H:%M:%S", localtime(time() + (5*60)));
POSIX::strftime("20%y-%m-%dT%H:%M:%S", localtime(time() + (10*60)));
#
# Locally generated tickets need a local DB index, which can be the
......
#
#
#
use strict;
use GeniDB;
sub DoUpdate($$$)
{
my ($dbhandle, $dbname, $version) = @_;
DBSetDefault($dbhandle);
DBQueryFatal( "ALTER TABLE `geni_authorities` " .
"MODIFY `type` enum( 'sa', 'ma', 'ch', 'cm', 'ses', 'am' ) " .
"NOT NULL DEFAULT 'sa'" );
return 0;
}
1;
......@@ -126,13 +126,16 @@ sub docleanup()
}
#
# Get topomap
# Get topomap and assorted linktest files.
# Right now we first try to fetch across NFS. Failing that we use tmcc.
# Eventually we should get this via http or frisbee.
#
# Failure to get the topomap is considered fatal, not so with linktest files.
#
sub dotopomap()
{
#
# Copy over the topomap so that it is locally resident. We will eventually
# get this via a tarfile instead of NFS.
# Copy over the topomap so that it is locally resident.
#
my $datadir = EXPDIR() . "/tbdata";
my $topomap = "$datadir/topomap.gz";
......@@ -169,40 +172,25 @@ sub dotopomap()
if (! -e $tempmap) {
#
# Try using tmcc. It returns compressed data so do it directly.
# XXX note that tmcc does not return a meaningful exit value.
#
system(TMCCBIN() . " $optarg $urnarg topomap > $tempmap");
#
# tmcc does not really return useful error codes.
#
if ($?) {
fatal("Could not get topomap from tmcd or from NFS");
}
}
if (! -e $templt) {
#
# Try using tmcc. It returns compressed data so do it directly.
# XXX note that tmcc does not return a meaningful exit value.
#
system(TMCCBIN() . " $optarg $urnarg ltmap > $templt");
#
# tmcc does not really return useful error codes.
#
if ($?) {
fatal("Could not get ltmap from tmcd or from NFS");
}
}
if (! -e $templtp) {
#
# Try using tmcc. It returns compressed data so do it directly.
# XXX note that tmcc does not return a meaningful exit value.
#
system(TMCCBIN() . " $optarg $urnarg ltpmap > $templtp");
#
# tmcc does not really return useful error codes.
#
if ($?) {
fatal("Could not get ltpmap from tmcd or from NFS");
}
}
if (-s $tempmap) {
......@@ -210,9 +198,14 @@ sub dotopomap()
if ($?) {
fatal("Could not unzip topomap");
}
unlink("$tempmap");
}
else {
#
# We make this fatal since route setup depends on this file.
# We could let it go, in which case route setup would non-fatally
# fail, but then we also wouldn't run linktest (since the topomap
# is missing) so we might not detect that route setup failed.
#
fatal("Could not get topomap");
}
......@@ -221,7 +214,6 @@ sub dotopomap()
if ($?) {
fatal("Could not unzip ltmap");
}
unlink("$templt");
}
else {
warning("Could not get ltmap");
......@@ -232,9 +224,12 @@ sub dotopomap()
if ($?) {
fatal("Could not unzip ltpmap");
}
unlink("$templtp");
}
else {
warning("Could not get ltpmap");
}
unlink("$tempmap");
unlink("$templt");
unlink("$templtp");
}
......@@ -8136,7 +8136,7 @@ COMMAND_PROTOTYPE(dotopomap)
reqp->pid, reqp->eid);
if ((fp = fopen(buf, "r")) == NULL) {
errorc("DOTOPOMAP: Could not open topomap for %s:",
errorc("DOTOPOMAP: Could not open topomap for %s",
reqp->nodeid);
return 1;
}
......@@ -8173,7 +8173,7 @@ COMMAND_PROTOTYPE(doltmap)
reqp->pid, reqp->eid);
if ((fp = fopen(buf, "r")) == NULL) {
errorc("DOLTMAP: Could not open ltmap for %s:",
errorc("DOLTMAP: Could not open ltmap for %s",
reqp->nodeid);
return 1;
}
......
......@@ -28,6 +28,7 @@ my $TB = "@prefix@";
my $TBOPS = "@TBOPSEMAIL@";
my $SETSITEVAR = "$TB/sbin/setsitevar";
my $STARTUP = "/usr/local/etc/rc.d/3.testbed.sh";
my $FRISBEE = "$TB/sbin/frisbeelauncher";
# Protos
sub Fatal($);
......@@ -45,6 +46,7 @@ use lib "@prefix@/lib";
use libdb;
use libtestbed;
use libEmulab;
use Image;
#
# Parse command arguments.
......@@ -161,6 +163,21 @@ system("$STARTUP stop >/dev/null 2>&1");
if ($?) {
Fatal("Could not stop testbed daemons. Stopping. Best to reboot!");
}
my $activeimages = Image->ActiveImages();
if (defined($activeimages)) {
my @activeimages = @{ $activeimages };
if (@activeimages) {
print "** Stopping running frisbee processes ...\n";
}
foreach my $image (@activeimages) {
my $imageid = $image->imageid();
print "-> Killing frisbee for $image ...\n";
system("$FRISBEE -k $imageid");
if ($?) {
Fatal("Could not stop frisbee for $image!");
}
}
}
print "** Testbed is stopped. Safe to power off or reboot\n";
exit(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment