OpenBSD CVS

CVS log for src/usr.sbin/smtpd/scheduler_ramqueue.c


[BACK] Up to [local] / src / usr.sbin / smtpd

Request diff between arbitrary revisions


Default branch: MAIN


Revision 1.48 / (download) - annotate - [select for diffs], Wed May 31 16:51:46 2023 UTC (12 months, 1 week ago) by op
Branch: MAIN
CVS Tags: OPENBSD_7_5_BASE, OPENBSD_7_5, OPENBSD_7_4_BASE, OPENBSD_7_4, HEAD
Changes since 1.47: +2 -1 lines
Diff to previous 1.47 (colored)

add missing include of time.h

spotted after a report on OpenSMTPD-portable.  While here include
sys/time.h in smtpd.h, as noted in event_init(3), since it includes
event.h.

ok millert@

Revision 1.47 / (download) - annotate - [select for diffs], Mon Jun 14 17:58:16 2021 UTC (2 years, 11 months ago) by eric
Branch: MAIN
CVS Tags: OPENBSD_7_3_BASE, OPENBSD_7_3, OPENBSD_7_2_BASE, OPENBSD_7_2, OPENBSD_7_1_BASE, OPENBSD_7_1, OPENBSD_7_0_BASE, OPENBSD_7_0
Changes since 1.46: +1 -13 lines
Diff to previous 1.46 (colored)

add required headers for smtpd.h and remove unnecessary ones in other files.

ok jung@

Revision 1.46 / (download) - annotate - [select for diffs], Wed May 26 18:08:55 2021 UTC (3 years ago) by eric
Branch: MAIN
Changes since 1.45: +8 -9 lines
Diff to previous 1.45 (colored)

replaces calls to err(3)/errx(3) with fatal()/fatalx() from log.c
for code that runs in the daemon.

ok florian@ millert@

Revision 1.45 / (download) - annotate - [select for diffs], Thu May 31 21:06:12 2018 UTC (6 years ago) by gilles
Branch: MAIN
CVS Tags: OPENBSD_6_9_BASE, OPENBSD_6_9, OPENBSD_6_8_BASE, OPENBSD_6_8, OPENBSD_6_7_BASE, OPENBSD_6_7, OPENBSD_6_6_BASE, OPENBSD_6_6, OPENBSD_6_5_BASE, OPENBSD_6_5, OPENBSD_6_4_BASE, OPENBSD_6_4
Changes since 1.44: +5 -5 lines
Diff to previous 1.44 (colored)

remove 'where' parameter from all x*() functions in utils.c, it doesn't
really help us with anything, propagate the change in codebase

ok millert@

Revision 1.44 / (download) - annotate - [select for diffs], Thu May 24 11:38:24 2018 UTC (6 years ago) by gilles
Branch: MAIN
Changes since 1.43: +2 -2 lines
Diff to previous 1.43 (colored)

switch smtpd to new grammar

ok eric@

Revision 1.43 / (download) - annotate - [select for diffs], Mon Jan 9 09:53:23 2017 UTC (7 years, 5 months ago) by reyk
Branch: MAIN
CVS Tags: OPENBSD_6_3_BASE, OPENBSD_6_3, OPENBSD_6_2_BASE, OPENBSD_6_2, OPENBSD_6_1_BASE, OPENBSD_6_1
Changes since 1.42: +4 -4 lines
Diff to previous 1.42 (colored)

smtpd joins the 7 other daemons that share the same log.c file.

The only major difference was the "log_trace" concept that is only
used by smtpd - move it from log.c into util.c and make it a local
concept.  This also needed to rename the global "verbose" variable to
"tracing" in a few places.

OK krw@ gilles@ eric@

Revision 1.42 / (download) - annotate - [select for diffs], Thu Oct 29 10:25:36 2015 UTC (8 years, 7 months ago) by sunil
Branch: MAIN
CVS Tags: OPENBSD_6_0_BASE, OPENBSD_6_0, OPENBSD_5_9_BASE, OPENBSD_5_9
Changes since 1.41: +19 -1 lines
Diff to previous 1.41 (colored)

Implement smtpctl discover <evpid|msgid>.

discover subcommand schedules envelopes manually moved to the queue.
It triggers a queue walk searching for envelopes with the given id,
schedules them and informs the user number of envelopes scheduled.
Admins no longer would need to restart the daemon to discover
manually moved messages.

Ok gilles@

Revision 1.41 / (download) - annotate - [select for diffs], Tue Jan 20 17:37:54 2015 UTC (9 years, 4 months ago) by deraadt
Branch: MAIN
CVS Tags: OPENBSD_5_8_BASE, OPENBSD_5_8, OPENBSD_5_7_BASE, OPENBSD_5_7
Changes since 1.40: +2 -1 lines
Diff to previous 1.40 (colored)

use <limits.h> comprehensively.  For now try to push <> includes to
each .c file, and out of the .h files.  To avoid overinclude.
ok gilles, in principle.  If this has been done right, -portable should
become easier to maintain.

Revision 1.40 / (download) - annotate - [select for diffs], Thu Jul 10 14:45:02 2014 UTC (9 years, 11 months ago) by eric
Branch: MAIN
CVS Tags: OPENBSD_5_6_BASE, OPENBSD_5_6
Changes since 1.39: +151 -83 lines
Diff to previous 1.39 (colored)

Improve the scheduler, better and simpler.

- Get rid of the scheduler_batch structure. The scheduler can now return
  envelopes of different types in a single run, interlacing them to avoid
  batch effects.

- Ask for an acknowledgement from the queue when removing or expiring
  an envelope to benefit from the inflight envelope limitation mechanism.
  This ensures that the scheduler always keeps sending envelopes at a rate
  that the queue can sustain in all cases.

- Limit the number of envelopes in a holdq.  When a holdq is full,
  new envelopes are put back in the pending queue instead, with a
  shorter retry time.

- Plumbing for proc-ified schedulers.

imsg version bump. smtpctl stop before updating.

ok gilles@

Revision 1.39 / (download) - annotate - [select for diffs], Tue Jul 8 07:59:31 2014 UTC (9 years, 11 months ago) by sobrado
Branch: MAIN
Changes since 1.38: +3 -3 lines
Diff to previous 1.38 (colored)

fix typos.

ok jmc@

Revision 1.38 / (download) - annotate - [select for diffs], Sat Apr 19 13:51:24 2014 UTC (10 years, 1 month ago) by gilles
Branch: MAIN
Changes since 1.37: +19 -19 lines
Diff to previous 1.37 (colored)

(void) cast strlcpy/strlcat/snprintf calls that cannot truncate (and would
       be harmless in this case if they could)

Revision 1.37 / (download) - annotate - [select for diffs], Tue Feb 4 14:56:03 2014 UTC (10 years, 4 months ago) by eric
Branch: MAIN
CVS Tags: OPENBSD_5_5_BASE, OPENBSD_5_5
Changes since 1.36: +22 -4 lines
Diff to previous 1.36 (colored)

internal improvements and cleanups

- get rid of the whole penalty thing for failed envelopes in the mta and scheduler.
- do not disable routes on smtp errors
- try to schedule all types of envelopes on each scheduler frame.

Revision 1.36 / (download) - annotate - [select for diffs], Thu Dec 26 17:25:32 2013 UTC (10 years, 5 months ago) by eric
Branch: MAIN
Changes since 1.35: +2 -2 lines
Diff to previous 1.35 (colored)

bcopy -> memmove
bzero -> memset

Revision 1.35 / (download) - annotate - [select for diffs], Thu Dec 5 09:26:47 2013 UTC (10 years, 6 months ago) by eric
Branch: MAIN
Changes since 1.34: +38 -1 lines
Diff to previous 1.34 (colored)

When a relay fails, let the scheduler update all envelopes in the
holdq as if they tempfailed.

Revision 1.34 / (download) - annotate - [select for diffs], Tue Dec 3 10:38:40 2013 UTC (10 years, 6 months ago) by eric
Branch: MAIN
Changes since 1.33: +66 -35 lines
Diff to previous 1.33 (colored)

schedule in O(log n)

Revision 1.33 / (download) - annotate - [select for diffs], Wed Nov 20 09:22:42 2013 UTC (10 years, 6 months ago) by eric
Branch: MAIN
Changes since 1.32: +16 -14 lines
Diff to previous 1.32 (colored)

Rework the mda and scheduler to use the holdq mechanism instead of
tempfail for limiting the number of pending deliveries to the same
user.  This allows to reach optimal delivery time even in case of
burst, while keeping the number of inflight envelopes low.

Revision 1.32 / (download) - annotate - [select for diffs], Sun Oct 27 17:47:53 2013 UTC (10 years, 7 months ago) by eric
Branch: MAIN
Changes since 1.31: +151 -4 lines
Diff to previous 1.31 (colored)

Implement a feedback mechanism which allows the mta to "hold" envelopes
in the scheduler when it has too many tasks for a given relay.  The
envelopes are put on a wait queue, and are not scheduled again until
the mta "releases" some envelopes from that queue.

It prevents from having too many inflight envelopes, which are out of reach
for the admin.

Revision 1.31 / (download) - annotate - [select for diffs], Fri Oct 25 19:18:43 2013 UTC (10 years, 7 months ago) by eric
Branch: MAIN
Changes since 1.30: +105 -100 lines
Diff to previous 1.30 (colored)

If the admin issues a remove request for an envelope which is inflight, do not
ignore the request. Instead defer the removal until the envelope returns to the
scheduler. Simplify code by a great deal in the process.

Revision 1.30 / (download) - annotate - [select for diffs], Fri Jul 19 21:34:31 2013 UTC (10 years, 10 months ago) by eric
Branch: MAIN
CVS Tags: OPENBSD_5_4_BASE, OPENBSD_5_4
Changes since 1.29: +0 -0 lines
Diff to previous 1.29 (colored)

Implement a scheduler_proc backend

Revision 1.29 / (download) - annotate - [select for diffs], Fri Jul 19 15:14:23 2013 UTC (10 years, 10 months ago) by eric
Branch: MAIN
Changes since 1.28: +136 -11 lines
Diff to previous 1.28 (colored)

scheduler improvements:
- implement suspend/resume scheduling for individual envelopes or message,
  with the associated smtpctl commands.
- allow the mta to request immediate scheduling of an envelope.
- on temporary failures a penalty can be given to further delay the next try.

Revision 1.28 / (download) - annotate - [select for diffs], Fri May 24 17:03:14 2013 UTC (11 years ago) by eric
Branch: MAIN
Changes since 1.27: +129 -102 lines
Diff to previous 1.27 (colored)

sync with OpenSMTPD 5.3.2

ok gilles@

Revision 1.27 / (download) - annotate - [select for diffs], Sun Feb 10 15:01:16 2013 UTC (11 years, 3 months ago) by eric
Branch: MAIN
CVS Tags: OPENBSD_5_3_BASE, OPENBSD_5_3
Changes since 1.26: +6 -11 lines
Diff to previous 1.26 (colored)

When getting the next batch of envelope to schedule, use an array to
store envelope ids, rather than a dynamic list.

ok gilles@

Revision 1.26 / (download) - annotate - [select for diffs], Sat Jan 26 09:37:23 2013 UTC (11 years, 4 months ago) by gilles
Branch: MAIN
Changes since 1.25: +8 -6 lines
Diff to previous 1.25 (colored)

Sync with our smtpd repo:

* first bricks of ldap and sqlite support (not finished but both working)
* new table API to replace map API, all lookups are done through tables
* improved handling of temporary errors throughout the daemon
* improved scheduler and mta logic: connection reuse, optimizes batches
* improved queue: more tolerant to admin errors, new layout, less disk-IO
* improved memory usage under high load
* SSL certs/keys isolated to lookup process to avoid facing network
* VIRTUAL support improved, fully virtual setups possible now
* runtime tracing of processes through smtpctl trace
* ssl_privsep.c sync-ed with relayd
* ssl.c no longer contains smtpd specific interfaces
* smtpd-specific ssl bits moved to ssl_smtpd.c
* update mail address in copyright

FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. FLUSH YOUR QUEUE.

smtpd.conf(5) simplified, it will require adaptations

ok eric@

Revision 1.25 / (download) - annotate - [select for diffs], Tue Nov 20 09:47:45 2012 UTC (11 years, 6 months ago) by eric
Branch: MAIN
Changes since 1.24: +179 -80 lines
Diff to previous 1.24 (colored)

Allow "smtpctl show queue" to run in "online" mode if the smtpd server
is running.  The scheduler sends the runtime state of each envelope to
the queue process which loads the envelope, fills the runtime bits and
sends the envelope back to the client. Iteration over the envelope set
happens in small chunks to make the request interruptible and to allow
the server to keep doing its job in the meantime.

Adpat "smtpctl schedule-all" to schedule the messages one by one using
the same iteration mechanism.

Document "smtpctl monitor" and "smtpctl show queue".

ok gilles@

Revision 1.24 / (download) - annotate - [select for diffs], Mon Nov 12 14:58:53 2012 UTC (11 years, 6 months ago) by eric
Branch: MAIN
Changes since 1.23: +4 -4 lines
Diff to previous 1.23 (colored)

Cleanups and improvements:

* Log more events (especially client session) and use a better scheme
  for that: each messages is prefixed with a token to easily identify
  its class:
    - info/warn/debug: general server messages
    - smtp-in: smtp client connections
    - relay: status update for relayed messages
    - delivery: status update for local deliveries

* Implement "smtpctl monitor" to display updates of selected internal
  counters.

* When reloading the on-disk queue at startup do not commit a message
  if no envelope was submitted for that message.

* Remove unused stuff in the config parser.

ok gilles@

Revision 1.23 / (download) - annotate - [select for diffs], Fri Nov 2 14:46:43 2012 UTC (11 years, 7 months ago) by eric
Branch: MAIN
Changes since 1.22: +18 -6 lines
Diff to previous 1.22 (colored)

Make counters more informative in the scheduler:

- Change the scheduler backend API a bit: commit() and rollback()
  API calls return the number of envelopes added or canceled; put
  the number of envelopes in the structure returned by batch().

- Properly report the number of incoming, registered, removed and
  expired envelopes, as well as the outcome of deliveries.

ok gilles@

Revision 1.22 / (download) - annotate - [select for diffs], Thu Sep 27 19:50:07 2012 UTC (11 years, 8 months ago) by eric
Branch: MAIN
Changes since 1.21: +2 -2 lines
Diff to previous 1.21 (colored)

When merging messages from an update, decrement the message counter if the
message already exists in the main queue, otherwise it's counted twice.

ok gilles@

Revision 1.21 / (download) - annotate - [select for diffs], Tue Sep 11 08:37:52 2012 UTC (11 years, 8 months ago) by eric
Branch: MAIN
Changes since 1.20: +251 -299 lines
Diff to previous 1.20 (colored)

Rework the scheduler internals.  Fix some scheduling loop issues and
handle envelope scheduling/expiration better.

ok gilles@

Revision 1.20 / (download) - annotate - [select for diffs], Sat Aug 25 15:47:47 2012 UTC (11 years, 9 months ago) by eric
Branch: MAIN
Changes since 1.19: +3 -2 lines
Diff to previous 1.19 (colored)

It's ok to try to rollback an update we don't know about. It might
happen if the message is aborted before an envelope is sent to the
scheduler.  In this case, just ignore it.

ok gilles@ chl@

Revision 1.19 / (download) - annotate - [select for diffs], Sat Aug 25 10:23:12 2012 UTC (11 years, 9 months ago) by gilles
Branch: MAIN
Changes since 1.18: +9 -9 lines
Diff to previous 1.18 (colored)

- introduce struct stat_value
- statistics can now have a type (counter, timestamp, timeval, timespec and
  possibly others in the future)
- stat_increment() / stat_decrement() now take an increment/decrement value
  and are at the moment only of type counter
- stat_set() now takes a stat_value
- provide helpers to convert raw values to stat_value

ok eric@, ok chl@

while at it fix a rq_queue_dump() call using a bogus timestamp in scheduler
ramqueue.

Revision 1.18 / (download) - annotate - [select for diffs], Fri Aug 24 12:29:50 2012 UTC (11 years, 9 months ago) by eric
Branch: MAIN
Changes since 1.17: +5 -130 lines
Diff to previous 1.17 (colored)

Remove the rq_host and rq_batch structures from the ramqueue scheduler.
The scheduler should only allow admin to schedule specific envelopes by
id, or msgid. More advanced scheduling (per host/route/whatever) should
be achieved using smtpctl schedule-id and proper filtering on the queue,
or using ad-hoc scheduler backend and tools.

ok gilles@ chl@

Revision 1.17 / (download) - annotate - [select for diffs], Sun Aug 19 15:06:36 2012 UTC (11 years, 9 months ago) by chl
Branch: MAIN
Changes since 1.16: +48 -11 lines
Diff to previous 1.16 (colored)

fix smtpctl schedule-all and schedule-id <msgid>

with help from eric@

ok eric@

Revision 1.16 / (download) - annotate - [select for diffs], Sun Aug 19 14:46:25 2012 UTC (11 years, 9 months ago) by chl
Branch: MAIN
Changes since 1.15: +2 -2 lines
Diff to previous 1.15 (colored)

avoid crash when removing non-existing envelope

from eric, ok eric@

cvs: ----------------------------------------------------------------------

Revision 1.15 / (download) - annotate - [select for diffs], Sun Aug 19 10:33:35 2012 UTC (11 years, 9 months ago) by eric
Branch: MAIN
Changes since 1.14: +2 -4 lines
Diff to previous 1.14 (colored)

Let the scheduler return all schedulable envelopes for the same message
as a single batch. The route for each envelope is sorted out by the mta
properly, so they are grouped as a single MAIL on each route.

ok gilles@ chl@

Revision 1.14 / (download) - annotate - [select for diffs], Sat Aug 18 18:18:23 2012 UTC (11 years, 9 months ago) by gilles
Branch: MAIN
Changes since 1.13: +13 -2 lines
Diff to previous 1.13 (colored)

- introduce stat_backend, an API for pluggable statistic backends
  > statistics are no longer static structures in shared memory
  > statistics are only set, smtpd never uses them in its logic
  > each statistic is a key/value where key can be any (dynamic) string
- convert all uses of the former API to use the new one
- implement stat_ramstat that keeps non-persistent stats in ram structure

ok eric@, ok chl@

Revision 1.13 / (download) - annotate - [select for diffs], Sat Aug 11 19:19:19 2012 UTC (11 years, 10 months ago) by chl
Branch: MAIN
Changes since 1.12: +5 -3 lines
Diff to previous 1.12 (colored)

fix use after free

ok eric@

Revision 1.12 / (download) - annotate - [select for diffs], Wed Aug 8 08:50:42 2012 UTC (11 years, 10 months ago) by eric
Branch: MAIN
Changes since 1.11: +556 -639 lines
Diff to previous 1.11 (colored)

Improve the scheduler backend API.

New envelopes are pushed into the scheduler through the insert()
commit() rollback() transactional interface functions.

Worklists are pulled from the scheduler through a single batch()
interface function, which returns a list of envelope ids and the
type of processing. Envelopes returned in this batch are said to
be "in-flight", as opposed to "pending". They are supposed to be
processed in some way, and either updated() or deleted() at some
point.

The schedule()/remove() functions are used to alter the internal
state of "pending" envelopes to make them schedulable.  The enve-
lopes will be part of a worklist on the next call to batch().

Rewrite the scheduler_ramqueue backend.

The initial queue loading in now done by the queue.

ok gilles@

Revision 1.11 / (download) - annotate - [select for diffs], Tue Jul 10 11:13:40 2012 UTC (11 years, 11 months ago) by gilles
Branch: MAIN
CVS Tags: OPENBSD_5_2_BASE, OPENBSD_5_2
Changes since 1.10: +10 -17 lines
Diff to previous 1.10 (colored)

- simplify the scheduler loop logic further, it is ridiculously simple now
  and I don't think we can do much better (at that level) :-p
- always break out of the handler after processing an envelope, this will
  avoid a busy scheduler from not getting a chance to handle SIGTERM/SIGINT
  YES we can now ctrl-c a maaaaad scheduler !

ok eric@, ok chl@

Revision 1.10 / (download) - annotate - [select for diffs], Wed Jun 20 20:45:23 2012 UTC (11 years, 11 months ago) by eric
Branch: MAIN
Changes since 1.9: +5 -5 lines
Diff to previous 1.9 (colored)

Finally get rid of the queue_kind enum in the queue API. Keep that
internally in fsqueue backend for now, and let the fsqueue_message()
and fsqueue_envelope() dispatchers do the right thing.

Based on a diff by chl@

ok chl@ gilles@

Revision 1.9 / (download) - annotate - [select for diffs], Sun Jun 17 15:17:08 2012 UTC (11 years, 11 months ago) by gilles
Branch: MAIN
Changes since 1.8: +31 -24 lines
Diff to previous 1.8 (colored)

- introduce struct scheduler_info and the scheduler_info() function to fill
  a struct scheduler_info given a struct envelope
- adapt the scheduler API and the scheduler_ramqueue backend to use the new
  struct scheduler_info instead of a struct envelope

idea discussed with eric@ and chl@, mechanical diff, no functional change

Revision 1.8 / (download) - annotate - [select for diffs], Fri May 25 13:51:42 2012 UTC (12 years ago) by chl
Branch: MAIN
Changes since 1.7: +2 -1 lines
Diff to previous 1.7 (colored)

add missing header needed by time()

ok gilles@

Revision 1.7 / (download) - annotate - [select for diffs], Sun Apr 15 12:12:35 2012 UTC (12 years, 1 month ago) by chl
Branch: MAIN
Changes since 1.6: +1 -3 lines
Diff to previous 1.6 (colored)

Remove dead assignments and newly created unused variables.

Found by LLVM/Clang Static Analyzer.

ok gilles@

Revision 1.6 / (download) - annotate - [select for diffs], Tue Mar 13 23:07:58 2012 UTC (12 years, 2 months ago) by gilles
Branch: MAIN
Changes since 1.5: +3 -2 lines
Diff to previous 1.5 (colored)

When moving back envelope from offload tree to msg tree ... remove the
envelope from offload tree not msg tree, this corrupts the ramqueue in
ways that I couldn't imagine before wasting so many hours tracking it.

Fixes crash on my server under load, no crash after about 20K mails
processed from up to 150 concurrent sessions.

Revision 1.5 / (download) - annotate - [select for diffs], Wed Mar 7 22:54:49 2012 UTC (12 years, 3 months ago) by gilles
Branch: MAIN
Changes since 1.4: +126 -61 lines
Diff to previous 1.4 (colored)

various reliability fixes:

- prevent queue_fsqueue from fatal() when it hits an ENOENT, it can happen
- change a bit the scheduler API to simplify it, fix runner accordingly

- we can't remove msg/batch from ramqueue while envelope is offloaded or
  it will cause a double, instead we add refcnt to both msg/batch and
  only free them when it hits 0

Revision 1.4 / (download) - annotate - [select for diffs], Tue Jan 31 21:05:26 2012 UTC (12 years, 4 months ago) by gilles
Branch: MAIN
CVS Tags: OPENBSD_5_1_BASE, OPENBSD_5_1
Changes since 1.3: +32 -8 lines
Diff to previous 1.3 (colored)

fix an issue observed this week-end while flooding ajacoutot@ :

we keep track of available fd's to prevent scheduling of messages if we
know that we are going to fail. however, since the envelope is not
removed from the scheduler, it will be rescheduled right away leading to
a busy loop in the scheduler. we know flag the mda/mta processes as BUSY
and do not schedule envelopes that target a BUSY process.

also, fix a potential bug that could lead to a use after free when doing
a batch/message/host traversal of schedulable envelopes.

while at it fix misuse of env->sc_opts as env->sc_flags, was not really
causing any issue as the misuse was constant ...

Revision 1.3 / (download) - annotate - [select for diffs], Mon Jan 30 10:02:55 2012 UTC (12 years, 4 months ago) by chl
Branch: MAIN
Changes since 1.2: +2 -1 lines
Diff to previous 1.2 (colored)

Add missing header needed by PRI format string

ok eric@ gilles@

Revision 1.2 / (download) - annotate - [select for diffs], Sat Jan 28 16:50:02 2012 UTC (12 years, 4 months ago) by gilles
Branch: MAIN
Changes since 1.1: +63 -5 lines
Diff to previous 1.1 (colored)

add optional display handler to scheduler_backend, if not NULL the handler
will be called for each iteration of the runner

implement a display handler for scheduler_ramqueue to display the entire
ramqueue (hosttree, msgtree and linear queue) in log_debug

Revision 1.1 / (download) - annotate - [select for diffs], Sat Jan 28 11:33:07 2012 UTC (12 years, 4 months ago) by gilles
Branch: MAIN

- introduce the scheduler_backend API
- introduce the scheduler_ramqueue backend
- remove all occurences of ramqueue outside of the ramqueue backend
- teach runner how to use the new API

it is now possible to write custom schedulers !

ok eric@, ok chl@

This form allows you to request diff's between any two revisions of a file. You may select a symbolic revision name using the selection box or you may type in a numeric name using the type-in text box.