• Leigh B. Stoller's avatar
    Up to now we have had two state variables associated with an experiment, · 4269dad1
    Leigh B. Stoller authored
    plus a lock field. The lock field was a simple "experiment locked, go away"
    slot that is easy to use when you do not care about the actual state that
    an experiment is in, just that it is in "transition" and should not be
    messed with.
    
    The other two state variables are "state" and "batchstate". The former
    (state) is the original variable that Chris added, and was used by the tb*
    scripts to make sure that the experiment was in the state each particular
    script wanted them to be in. But over time (and with the addition of so
    much wrapper goo around them), "state" has leaked out all over the place to
    determine what operations on an experiment are allowed, and if/when it
    should be displayed in various web pages. There are a set of transition
    states in addition to the usual "active", "swapped", etc like "swapping"
    that make testing state a pain in the butt.
    
    I added the other state variable ("batchstate") when I did the batch
    system, obviously! It was intended as a wrapper state to control access to
    the batch queue, and to prevent batch experiments from being messed with
    except when it was really okay (for example, its okay to terminate a
    swapped out batch experiment, but not a swapped in batch experiment since
    that would confuse the batch daemon). There are fewer of these states, plus
    one additional state for "modifying" experiments.
    
    So what I have done is change the system to use "batchstate" for all
    experiments to control entry into the swap system, from the web interface,
    from the command line, and from the batch daemon. The other state variable
    still exists, and will be brutally pushed back under the surface until its
    just a vague memory, used only by the original tb* scripts. This will
    happen over time, and the "batchstate" variable will be renamed once I am
    convinced that this was the right thing to do and that my changes actually
    work as intended.
    
    Only people who have bothered to read this far will know that I also added
    the ability to cancel experiment swapin in progress. For that I am using
    the "canceled" flag (ah, this one was named properly from the start!), and
    I test that at various times in assign_wrapper and tbswap. A minor downside
    right now is that a canceled swapin looks too much like a failed swapin,
    and so tbops gets email about it. I'll fix that at some point (sometime
    after the boss complains).
    
    I also cleaned up various bits of code, replacing direct calls to exec
    with calls to the recently improved SUEXEC interface. This removes
    some cruft from each script that calls an external script.
    
    Cleaned up modifyexp.ph3 quite a bit, reformatting and indenting.
    Also fixed to not run the parser directly! This was very wrong; should
    call nscheck instead. Changed to use "nobody" group instead of group
    flux (made the same change in nscheck).
    
    There is a script in the sql directory called newstates.pl. It needs
    to be run to initialize the batchstate slot of the experiments table
    for all existing experiments.
    4269dad1
Name
Last commit
Last update
account Loading commit data...
apache Loading commit data...
assign Loading commit data...
autoconf Loading commit data...
capture Loading commit data...
cdrom Loading commit data...
db Loading commit data...
delay/linux Loading commit data...
dhcpd Loading commit data...
discvr Loading commit data...
doc Loading commit data...
event Loading commit data...
hw_config Loading commit data...
install Loading commit data...
ipod Loading commit data...
lib Loading commit data...
os Loading commit data...
patches Loading commit data...
pxe Loading commit data...
rc.d Loading commit data...
rpms Loading commit data...
security Loading commit data...
sensors Loading commit data...
sql Loading commit data...
ssl Loading commit data...
sysadmin Loading commit data...
tbsetup Loading commit data...
testsuite Loading commit data...
tip Loading commit data...
tmcd Loading commit data...
tools Loading commit data...
utils Loading commit data...
vis Loading commit data...
www Loading commit data...
xmlrpc Loading commit data...
BUGS Loading commit data...
COPYING Loading commit data...
GNUmakefile.in Loading commit data...
GNUmakerules Loading commit data...
Makeconf.in Loading commit data...
README Loading commit data...
TODO Loading commit data...
TODO.plab Loading commit data...
config.h.in Loading commit data...
configure Loading commit data...
configure.in Loading commit data...
defs-barb-emulab Loading commit data...
defs-barb-mini Loading commit data...
defs-calfeld-emulab Loading commit data...
defs-default Loading commit data...
defs-example Loading commit data...
defs-gatech Loading commit data...
defs-kwebb-emulab Loading commit data...
defs-mini Loading commit data...
defs-newbold-emulab Loading commit data...
defs-newbold-macdb Loading commit data...
defs-newbold-mini Loading commit data...
defs-rchriste-emulab Loading commit data...
defs-ricci-emulab Loading commit data...
defs-ricci-mini Loading commit data...
defs-shash-emulab Loading commit data...
defs-shash-mini Loading commit data...
defs-stoller-emulab Loading commit data...
defs-stoller-home Loading commit data...
defs-stoller-mini Loading commit data...
defs-uky Loading commit data...
defs-wide Loading commit data...