1. 15 Jul, 2004 1 commit
    • Leigh B. Stoller's avatar
      Overview: Add Event Groups: · ed964507
      Leigh B. Stoller authored
      	set g1 [new EventGroup $ns]
      	$g1 add  $link0 $link1
      	$ns at 60.0 "$g1 down"
      
      See the new advanced tutorial section on event groups for a better
      example.
      
      Changed tbreport to dump the event groups table when in summary mode.
      At the same time, I changed tbreport to use the recently added
      virt_lans:vnode and ip slots, decprecating virt_nodes:ips in one more
      place. I also changed the web interface to always dump the event and
      event group summaries.
      
      The parser gets a new file (event.tcl), and the "at" method deals with
      event group events by expanding them inline into individual events
      sent to each member. For some agents, this is unavoidable; traffic
      generators get the initial params in the event, so it is not possible
      to send a single event to all members of the group. Same goes for
      program objects, although program objects do default to the initial
      command now, at least on new images.
      
      Changed the event scheduler to load the event groups table. The
      current operation is that the scheduler expands events sent to a
      group, into a set of distinct events sent to each member of the
      group. At some point we proably want to optimize this by telling the
      agents (running on the nodes) what groups they are members of.
      
      Other News: Added a "mustdelay" slot to the virt_lans table so the
      parser can tell assign_wrapper that a link needs to be delayed, say if
      there are events or if the link is red/gred. Previously,
      assign_wrapper tried to figure this out by looking at the event list,
      etc. I have removed that code; see database-migrate for instructions
      on how to initialize this slot in existing experiments. assign_wrapper
      is free to ignore or insert delays anyway, but having the parser do
      this makes more sense.
      
      I also made some "rename" changes to the parser wrt queues and lans
      and links. Not really necessary, but I got sidetracked (for several
      hours!) trying to understand that rename stuff a little better, and
      now I do.
      ed964507
  2. 12 Jul, 2004 1 commit
  3. 06 Jul, 2004 1 commit
  4. 23 Jun, 2004 1 commit
  5. 18 Jun, 2004 1 commit
  6. 08 Jun, 2004 1 commit
    • Leigh B. Stoller's avatar
      Add slots to virt_lans to rationalize the relationship between · 43a804e9
      Leigh B. Stoller authored
      virt_lans and virt_nodes. The intent is to migrate away from
      the convention we use in virt_nodes:ips and virt_lans:member
      to a more acceptable representation (one that does not rely
      on textual conventions like space separated lists of colon
      seperated entities. Instead:
      
      	virt_nodes
      		vname:	nodeA
              virt_lans
      		vname:  link0
      		vport:  0
      		ip:     1.1.1.2
      
      		vname:  link1
      		vport:  1
      		ip:     1.1.2.2
      
      	alter table virt_lans add vnode varchar(32) NOT NULL default '' \
      		after vname;
      	alter table virt_lans add vport tinyint(3) NOT NULL default '0' \
      		after vnode;
              alter table virt_lans add ip varchar(15) NOT NULL default '' \
      		after vport;
      
      Then run this script to update these new fields from the
      existing ips,member slots. This must be run after installing
      the parser changes, or you can just run it again.
      
      	./ipmember.pl
      
      This is a transitional phase; the old slots will be left in place
      until they are no longer used, at which time we will also add a
      unique key to the table (pid,eid,vname,vnode,vport). assign_wrapper
      will be the hardest to change, but other scripts should be easy.
      
      Whats vport about? Rather then rely on IP addresses to form a
      unique key, we use vport (a small integer) so that we can delay the
      IP assignment until later (after initial DB insertion).
      43a804e9
  7. 07 Jun, 2004 1 commit
  8. 01 Jun, 2004 1 commit
  9. 31 May, 2004 1 commit
  10. 26 May, 2004 1 commit
  11. 25 May, 2004 1 commit
  12. 07 May, 2004 1 commit
  13. 03 May, 2004 1 commit
    • Leigh B. Stoller's avatar
      Change to eventlist table; bump size of vname from 20 to 64. I do not · d5c51dd2
      Leigh B. Stoller authored
      see (or remember) any reason for this slot to be 20 chars, when the
      name of every other vname slot is 32. I looked in the event scheduler
      and there do not appear to be any problems there with bumping it. Note
      that I choose 64 cause we tend to construct agent names that might be
      longer then 32 since they are based on real vnames (lan0, node0, etc).
      d5c51dd2
  14. 12 Apr, 2004 1 commit
  15. 09 Apr, 2004 1 commit
  16. 07 Apr, 2004 2 commits
    • Leigh B. Stoller's avatar
      Add linktest_level to experiments table. Value is 0-4, where 0 means · 10cef776
      Leigh B. Stoller authored
      not to run linktest.
      10cef776
    • Leigh B. Stoller's avatar
      Initial DB support for wireless nodes. Added a "protocol" text field and · 90a6e82b
      Leigh B. Stoller authored
      an "is_accesspoint" boolean to virt_lans. The former defaults to
      "ethernet" but can be set to anything (80211a, 80211b, etc) in the NS
      file. The is_accesspoint is temporary, and simply allows you to set
      which node is the accesspoint in the NS file. This slot will probably
      move to another table at some point.
      
      Added interface_capabilities table, which is intended to list the
      capabilities and the default values, for interfaces listed in the
      interface_types table. This allows a more flexible description of
      interfaces, expecially wireless devices. Initially, I have seeded the
      table with just the default protocol (ethernet) and the speed. For
      example, the fxp:
      
      	fxp              | protocols         | ethernet |
      	fxp              | ethernet_defspeed | 100000   |
      
      As you can see, protocols is plural, and is intended to be a comma
      separated list. So, for the atheros wireless card:
      
      	ath              | protocols         | 80211a,80211b,80211g |
      	ath              | 80211a_defspeed   | 54000                |
      	ath              | 80211b_defspeed   | 11000                |
      	ath              | 80211g_defspeed   | 54000                |
      
      I gave up on using the entire row as a primary key; this is just too
      painful from perl/php/python where hashes are the most popular data
      structure, and duplicate columns get overwritten.
      90a6e82b
  17. 31 Mar, 2004 1 commit
  18. 20 Mar, 2004 1 commit
  19. 19 Mar, 2004 1 commit
  20. 16 Mar, 2004 1 commit
  21. 15 Mar, 2004 1 commit
  22. 09 Mar, 2004 1 commit
    • Leigh B. Stoller's avatar
      Clean up of the web to batchexp interface: · b6a9b9c2
      Leigh B. Stoller authored
      * Add proper check_slot() calls to all of the user input that is going into
        the DB (already had taint checking), since batchexp is now available for
        interactive use from ops.
      
      * Remove separate DB insertions of noswap/noidleswap reasons from web
        script, and pass on the command line from web to batchexp. Now inserted
        in the backend script so that they can be provided on the command line
        when batchexp is used interactively.
      
      * Change defaults in backend script; experiments now default to swappable
        and idleswap; previously defaulted to not swappable and no idleswap.
      
      * Remove [-s] (swappable) and add [-S <reason>] option. -S sets experiment to
        not swappable, with supplied reason (text string).
      
      * Add [-L <reason>] option. -L sets experiment to no idleswap, with
        supplied reason (text string).
      
      * Add several missing table_regex entries for experiments table.
      b6a9b9c2
  23. 27 Feb, 2004 1 commit
  24. 17 Feb, 2004 1 commit
  25. 13 Feb, 2004 1 commit
  26. 11 Feb, 2004 1 commit
  27. 09 Feb, 2004 1 commit
  28. 02 Feb, 2004 1 commit
  29. 28 Jan, 2004 3 commits
  30. 23 Jan, 2004 3 commits
  31. 15 Jan, 2004 1 commit
    • Mac Newbold's avatar
      libdb changes: · 78ad260c
      Mac Newbold authored
      - add functions to recursively dump hashes and arrays into a string
        suitable for printing as debugging output (great for data structures)
      
      - add three new trigger strings
      
      - add 'use strict', do corresponding cleanup
      
      stated changes:
      
      - move special-cased stuff in handleEvent for PXEBOOTING and BOOTING into
        triggers (PXEBOOTING, BOOTING, and CHECKGENISUP)
      
      - clarify (via comments) the existing kinds of triggers and which ones run
        when, and add a new kind (global "any-mode" triggers). We already had
        per-node mode-specific, per-node any-mode, and global mode-specific
        triggers. Now you can have a trigger that is good for any mode in a
        given state, that can be overridden on a mode-specific basis. This is
        great for PXEBOOTING, BOOTING, and ISUP, since they each have a trigger
        list that should be run regardless of what mode you're in. Now they only
        require 3 entries instead of 3*N that have to be maintained per mode.
      
           # A note about triggers:
           #
           # "per-node" triggers only affect their specific node in a
           # particular mode/state, and are run first of all. "global"
           # triggers are triggers for a given mode/state that affect all
           # nodes, and are run after any per-node triggers. "Any-mode"
           # triggers are tied to a state, and occur in that state in any
           # mode. The any-mode triggers are over-ridden by global triggers,
           # and if an "Any-mode" trigger for state XYZ exists as well as a
           # global trigger for mode FOOBAR state XYZ, then when I arrive in
           # XYZ any per-node triggers will be run. Then, if I'm in mode
           # FOOBAR, only the global trigger will run. If I'm in any other
           # mode, only the any-mode trigger will run.
      
           # (our "*" is stored as $TBANYMODE)
           # Per-node triggers have a specific node_id
           # Global triggers have "*" as the node_id
           # Any-mode triggers have "*" as the mode, and can be global or per-node
      
        The updated table looks like this in the accompanying change to
        database-fill.sql:
      
      +---------+----------+------------+-----------------------+
      | node_id | op_mode  | state      | trigger               |
      +---------+----------+------------+-----------------------+
      | *       | *        | BOOTING    | BOOTING, CHECKGENISUP |
      | *       | *        | ISUP       | RESET                 |
      | *       | *        | PXEBOOTING | PXEBOOT               |
      | *       | RELOAD   | RELOADDONE | RESET, RELOADDONE     |
      | *       | ALWAYSUP | SHUTDOWN   | ISUP                  |
      +---------+----------+------------+-----------------------+
      
      - I also cleaned up the functions that add, get, and delete triggers.
        Before, the get function didn't include global triggers. Now it does,
        and has an option to just get the per-node triggers. Add and delete are
        still just per-node, of course.
      
      - Also found and fixed some little bugs while I was in there. (global
        triggers not taking a list,
      
      These changes are me getting ready to re-add all the changes I made months
      ago in order to do a before-and-after experiment for my thesis. Between
      now and the end of next week I'll be working on taking before numbers,
      patching stated with the changes, and getting after numbers.
      
      The problems I'm trying to replicate are the problems and slowdowns we
      used to get when os_{load,setup} would reboot a node, thinking it had
      timed out, when it really didn't know whether it was making progress or
      not. The fix includes making os_{load,setup} depend on stated to watch for
      progress and timeouts, and do any appropriate retries. Part of that is the
      StateWait stuff, that lets programs watch for events easily, and the
      node_reboot-with-events stuff that puts stated in control of nodes as they
      reboot.
      78ad260c
  32. 14 Jan, 2004 1 commit
  33. 12 Jan, 2004 2 commits
  34. 08 Jan, 2004 1 commit