1. 09 Aug, 2004 9 commits
    • Russ Fish's avatar
    • Leigh B. Stoller's avatar
      Some cleanups and performance improvements: · f604dc33
      Leigh B. Stoller authored
      * Be more selective about what lists are regenerated; we were generating
        way too many lists each time called. When calling from tbswap, use new
        -t option to generate just the active lists. When called from setgroups,
        use -p option to generate lists just for the project. Add update option
        for when user changes email address (and all lists really do need to be
        regenerated).
      
      * Add "diff" processing. Instead of blindly firing each new list over to
        ops with ssh, store a copy of all of the lists in
        /usr/testbed/lists. After we generate the new list, diff it against the
        stored copy. If the same, skip it. Otherwise stash new copy and fire it
        over. This should reduce the wait times by quite a bit since the lists
        rarely change (except for the activity lists of course).
      
      * Add -n (impotent) option for debugging; skips the ssh over to ops.
      
      * Reorg a lot of stuff; it was getting hard to follow.
      f604dc33
    • Russ Fish's avatar
      Remove outdated bug notes. · 3905bfe2
      Russ Fish authored
      Add more description of "non-tree links" and the "show"/"hide" controls.
      Add some more cross-linking and improve readability.
      3905bfe2
    • Leigh B. Stoller's avatar
      Clean up the DirectoryIndex mess. · 30c0cff3
      Leigh B. Stoller authored
      * Remove DirectoryIndex from the .htaccess file. This file set the
        index for every directory to start.php3, which was wrong.
      
      * Change index.html to redirect to index.php3.
      
      * Change start.php3 to redirect to index.php3. I left the start.php3
        script in place (one line script) so that existing bookmarks work.
      
      * Move the code that used to be in start.php3 to the top of
        index.php3; this is the code that would zap to the My Emulab page
        when the user was logged in (and in https mode). Much simpler now.
      30c0cff3
    • Leigh B. Stoller's avatar
      Forgot to add new file. · ef0a0886
      Leigh B. Stoller authored
      ef0a0886
    • Leigh B. Stoller's avatar
      Fix silly spelling mistake. · 4062690b
      Leigh B. Stoller authored
      4062690b
    • Leigh B. Stoller's avatar
      Major rework of the script interface to Emulab. Up to now we have been · 5ef8f70a
      Leigh B. Stoller authored
      supporting both a shell script driven interface, plus the newer XMLRPC
      interface. This change removes the script driven interface from boss,
      replacing it with just the XMLRPC interface. Since we like to maintain
      backwards compatability with interfaces we have advertised to users (and
      which we know are being used), I have implemented a script wrapper that
      exports the same interface, but which converts the operations into XMLRPC
      requests to the server. This wrapper is written in python and uses our
      locally grown xmlrpc-over-ssh library. Like the current "demonstation"
      client, you can take this wrapper to your machine that has python and ssh
      installed, and use it there; you do not need to use these services from
      just users.emulab.net. Other things to note:
      
      * The wrapper is a single python script that has a "class" for each wrapped
        script. Running the wrapper without any arguments will list all of the
        operations it supports. You can invoke the wrapper with the operation as
        its argument:
      
          {987} stoller$ script_wrapper.py swapexp --help
          swapexp -e pid,eid in|out
          swapexp pid eid in|out
          where:
               -w   - Wait for experiment to finish swapping
               -e   - Project and Experiment ID
               in   - Swap experiment in  (must currently be swapped out)
              out   - Swap experiment out (must currently be swapped in)
      
          Wrapper Options:
              --help      Display this help message
              --server    Set the server hostname
              --login     Set the login id (defaults to $USER)
              --debug     Turn on semi-useful debugging
      
         But more convenient is to create a set of symlinks so that you can just
         invoke the operation by its familiar scriptname. This is what I have
         done on users.emulab.net.
      
          {987} stoller$ /usr/tesbed/bin/swapexp --help
          swapexp -e pid,eid in|out
          swapexp pid eid in|out
      
      
      * For those of you talking directly to the RPC server from python, I have
        added a wrapper class so that you can issue requests to any of the
        modules from a single connection. Instead using /xmlrpc/modulename, you
        can use just /xmlrpc, and use method names of the form experiment.swapexp,
        node.reboot, etc.
      
        Tim this should be useful for the netlab client which I think opens up
        multiple ssh connections?
      
      * I have replaced the paperbag shell with a stripped down xmlrpcbag shell
        that is quite a bit simpler since we no longer allow access to anything
        but the RPC server. No interactive mode, no argument processing, no
        directory changing, etc. My main reason for reworking the bag is to make
        it easier to understand, maintain, and verify that it is secure. The new
        bag also logs all connections to syslog (something we should have done in
        the orginal). I also added some setrlimit calls (core, maxcpu). I also
        thought about niceing the server down, but that would put RPC users at a
        disadvantage relative to web interface users. When we switch the web
        interface to use the XMLRPC backend, we can add this (reniceing from the
        web server would be a pain cause of its scattered implementation).
      5ef8f70a
    • Leigh B. Stoller's avatar
      Remove node_list script; we give that to the user via an XMLRPC call. · 38f90bb3
      Leigh B. Stoller authored
      Remove all symlinks of plasticwrap; this has been replaced by the XMLRPC
      server.
      38f90bb3
    • Leigh B. Stoller's avatar
      Make sure that files written into the experiment subdir are group · cdf7c791
      Leigh B. Stoller authored
      writable by adding a umask(0002) call.
      cdf7c791
  2. 06 Aug, 2004 3 commits
    • Russ Fish's avatar
      - · d484691c
      Russ Fish authored
      Resizing the window, and moving the splitter between the HyperViewer canvas and
      controls panel, now work.
      
       . Resizing of GLCanvas for HyperViewer.  EVT_SIZE(self.hypView, self.OnResizeCanvas)
      
       . Control the size of the controls panel.
      		 EVT_SIZE(self.window_1, self.OnResizeWindow)
      		 EVT_SPLITTER_SASH_POS_CHANGED(self.window_1, -1, self.OnSashChanged)
      
       . Keep dragging of the window divider outside the window from blanking the
         HyperViewer canvas or controls panel.         self.window_1.SetMinimumPaneSize(21)
      d484691c
    • Russ Fish's avatar
      · c89c8d3d
      Russ Fish authored
      Minor hypview stuff:
      
         . Cleanup: Don't need to call SwapBuffers in the Python code anymore.
      
         . Since we're walking a tree, we want the Show/Hide buttons to be
           on if Descend is checked.
      
         . Go to the top node after read-in, so the node info is displayed.
      c89c8d3d
    • Russ Fish's avatar
      Two hypview client fixes: · 676d3f9a
      Russ Fish authored
        . Make the AnimationFrames GUI control work on Windows and FreeBSD.
      
        . Make animated moves work in HyperViewer on FreeBSD.
      
          - Add setFrameEndCB to HypView{,er}.{h,cpp}, frameEndCB to hvmain.cpp .
      
          - Pass the wxGLCanvas pointer from the Python app all the way down to
            frameEndCB to call wxGLCanvas->SwapBuffers().
            The pointer comes through "encrypted" from Python, hack around that.
      
          - hvMain now needs to be compiled and linked against the
            wx_gtk2-2.4 includes and libs so it can call SwapBuffers.
      676d3f9a
  3. 05 Aug, 2004 4 commits
  4. 03 Aug, 2004 6 commits
  5. 31 Jul, 2004 1 commit
  6. 30 Jul, 2004 7 commits
  7. 29 Jul, 2004 10 commits
    • Russ Fish's avatar
      Fix a flock of little things in the hypview GUI: · 0dc1bff4
      Russ Fish authored
       . Improve control panel layout by removing spacers and using Border spacing instead.
       . Start to make resizing work by setting Expand options in the GUI.
       . Change the LabelsMode widget from a wxComboBox to a wxChoice.
       . Disallow non-numeric chars and handle Enter in the "Node/Link depth" spinboxes.
       . Handle Enter in the Open dialog text fields; complain politely about empty text.
       . Disable show/hide buttons when there are no links in or out, respectively.
      0dc1bff4
    • Jonathon Duerig's avatar
    • Jonathon Duerig's avatar
      Added new ratio-cut partitioning scheme and a METIS search-for-ratio-cut · c7498dfa
      Jonathon Duerig authored
      partitioning scheme. They seem to perform about the same, which is not what was expected. Further tests and tweaks may uncover the cause.
      c7498dfa
    • Leigh B. Stoller's avatar
      * Set $libdb::DBQUERY_MAXTRIES to zero; infinite retry. · 66a2c7db
      Leigh B. Stoller authored
      * Change use of TBGetSiteVar to the non-fatal variant to prevent the
        batch daemon from exiting when mysql goes whacky.
      66a2c7db
    • Leigh B. Stoller's avatar
    • Leigh B. Stoller's avatar
      Rework TBGetSiteVar() slightly. Add optional second parameter $rptr to · 03403a55
      Leigh B. Stoller authored
      store the result in. When called this new way, the value goes into
      $rptr, and exit status is returned to caller instead. In addition,
      when called this way, all errors are non-fatal; it is up to the caller
      to decide what to do.
      03403a55
    • Leigh B. Stoller's avatar
      Two unrelated bug fixes (with some related cleanups and tweaks) · 9f4edbba
      Leigh B. Stoller authored
      * The first involves swapmod. When a swapmod on an active experiment fails,
        tbswap will reswap the experiment back to the original configuration. The
        problem is that it is reswapping it with the *new* virtual state of the
        experiment in the DB. It is not until later when control returns to
        swapexp that the virtual state is restored. This is plainly wrong, and in
        fact was causing the event scheduler grief cause it was starting up,
        reading the the virtual topo, which was different, wrong, and about to be
        blown away.
      
        I reorganized the modify section of swapexp so that virtual state is
        restored only when its a swapmod on a swapped experiment. On an active
        experiment, I moved that code down into tbswap, which will now does all
        of the virtual and physical state retore before it does the reswap back
        to the original experiment. Just for kicks, its also done if tbswap
        decides to swap the experiment cause of a fatal error.
      
        Cleanups: I changed $NoRecover to $CanRecover. My feeble brain cannot
        deal with !$NoRecover. I know, two knots make a wright for most people.
      
        Renderer: I was annoyed by the fact that we rerun the renderer on a
        failed swapmod. The original reason is that the renderer runs in the
        background and so vis_nodes cannot be saved with the rest of the virtual
        state tables cause the renderer might still be running when the user
        fires off the swapmod. Well, the hell with that. We lock the vis_nodes
        table anyway in the renderer during update, so we are certain to get a
        consistent snapshot. We store the renderer pid in the experiments table,
        so if the renderer was running, just fire off another one; mostly this is
        not going to happen. In addition, tbprerun no longer starts a new
        renderer when doing the swapmod; I start the new renderer later after
        swapmod succeeds. I might end up tweaking this a bit depending on what
        people notice as being different.
      
      * Termination changes to batchexp and swapexp: I've rearranged the
        termination code using an END block so that any uncontrolled exit from
        either batchexp or swapexp will go through the cleanup code, and
        hopefully insert a stats record, as well as not leave the experiment in
        some inbetween state. I've set the max DB retry count to zero in both
        cases, which means infinite retry. I've also added SIGTERM handlers to
        both so that again, we can kill a hung batch/swap and have it clean up
        things more or less. Note that END blocks are not caught when a signal
        causes the program to die; you have to catch it and then die() so that
        the END block is executed.
      
        Eventually, we need to clean up the various libraries so that we do not
        use DBQueryFatal(), but rather use DBQueryWarn(), and look for failure.
        Ditto for event system interface.
      9f4edbba
    • Leigh B. Stoller's avatar
      Set $libdb::DBQUERY_MAXTRIES = 0, which means inifinite retry. · 719a65c4
      Leigh B. Stoller authored
      That will show the devil who means business. Right on.
      719a65c4
    • Mike Hibler's avatar
    • Mike Hibler's avatar
      01639240