Rodent of Unusual Size
2005-04-28 03:46:07 UTC
flood STATUS: -*-text-*-
Last modified at [$Date: 2004-11-24 19:36:41 -0500 (Wed, 24 Nov 2004) $]
Release:
1.0: Released July 23, 2002
milestone-03: Tagged January 16, 2002
ASF-transfer: Released July 17, 2001
milestone-02: Tagged August 13, 2001
milestone-01: Tagged July 11, 2001 (tag lost during transfer)
RELEASE SHOWSTOPPERS:
* "Everything needs to work perfectly"
Other bugs that need fixing:
* I get a SIGBUS on Darwin with our examples/round-robin-ssl.xml
config, on the second URL. I'm using OpenSSL 0.9.6c 21 dec 2001.
* iPlanet sends "Content-length" - there is a hack in there now
to recognize it. However, all HTTP headers need to be normalized
before checking their values. This isn't easy to do. Grr.
* OpenSSL 0.9.6
Segfaults under high load. Upgrade to OpenSSL 0.9.6b.
Aaron says: I just found a big bug that might have been causing
this all along (we weren't closing ssl sockets).
How can I reproduce the problem you were seeing
to verify if this was the fix?
* SEGVs when /tmp/.rnd doesn't exist are bad. Make it configurable
and at least bomb with a good error message. (See Doug's patch.)
Status: This is fixed, no?
* If APR has disabled threads, flood should as well. We might want
to have an enable/disable parameter that does this also, providing
an error if threads are desired but not available.
* flood needs to clear pools more often. With a long running test
it can chew up memory very quickly. We should just bite the bullet
and create/destroy/clear pools for each level of our model:
farm, farmer, profile, url/request-cycle, etc.
* APR needs to have a unified interface for ephemeral port
exhaustion, but aparently Solaris and Linux return different
errors at the moment. Fix this in APR then take advantage of
it in flood.
* The examples/analyze-relative scripts fail when there are less
than 5 unique URLs.
Other features that need writing:
* More analysis and graphing scripts are needed
* Write robust tool (using tethereal perhaps) to take network dumps
and convert them to flood's XML format.
Status: Justin volunteers. Aaron had a script somewhere that is
a start. Jacek is working on a Mozilla application, codename
"Flood URL bag" (much like Live HTTP Headers) and small
HTTP proxy.
* Get chunked encoding support working.
Status: Justin volunteers. He got sidetracked by the httpd
implementation of input filtering and never finished
this. This is a stopgap until apr-serf is completed.
* Maybe we should make randfile and capath runtime directives that
come out of the XML, instead of autoconf parameters.
* We are using apr_os_thread_current() and getpid() in some places
when what we really want is a GUID. The GUID will be used to
correlate raw output data with each farmer. We may wish to print
a unique ID for each of farm, farmer, profile, and url to help in
postprocessing.
* We are using strtol() in some places and strtoll() in others.
Pick one (Aaron says strtol(), but he's not sure).
* Validation of responses (known C-L, specific strings in response)
Status: Justin volunteers
* HTTP error codes (ie. teach it about 302s)
Justin says: Yeah, this won't be with round_robin as implemented.
Need a linked list-based profile where we can insert
new URLs into the sequence.
* Farmer (Single-thread, multiple profiles)
Status: Aaron says: If you have threads, then any Farmer can be
run as part of any Farm. If you don't have threads, you can
currently only run one Farmer named "Joe" right now (this will
be changed so that if you don't have threads, flood will attempt
to run all Farmers in serial under one process).
* Collective (Single-host, multiple farms)
This is a number of Farms that have been fork()ed into child processes.
* Megaconglomerate (Multiple hosts each running a collective)
This is a number of Collectives running on a number of hosts, invoked
via RSH/SSH or maybe even some proprietary mechanism.
* Other types of urllists
a) Random / Random-weighted
b) Sequenced (useful with cookie propogation)
c) Round-robin
d) Chaining of the above strategies
Status: Round-robin is complete.
* Other types of reports
Status: Aaron says: "simple" reports are functional. Justin added
a new type that simply prints the approx. timestamp when
the test was run, and the result as OK/FAIL; it is called
"easy reports" (see flood_easy_reports.h).
Furthermore, simple_reports and easy_reports both print
out the current requesting URI line.
Documentation that needs writing:
* Documentation? What documentation? RTFS?
Status: Justin volunteers. He'll probably use Anakia for user
docs and doxygen for source code comments.
* Feature set
We'll have to eventually write down all the features we support,
which will most likely come out to be the various XML parameters
we support.
Available Patches:
Open issues:
* Ponder using apr-serf in flood
Status: This requires apr-serf to be written. Chicken and egg.
Ideally, apr-serf would handle buckets, filters, and
other cool stuff. However, this isn't the highest of
priorities.
* Validating XML Parser?
Justin says: I don't think we want this. We want a standalone
validator.
Aaron says: I strongly feel we should have this turned on at
least for the invoking "Megaconglomerate". The added
overhead for validating when we're already parsing
will be minimal. It will not affect the results of
the tests. It only happens when a new flood process
is created (directly or via rsh/ssh), not when invoking
a collective, farm, farmer, or profile. What it gives
us from the user's standpoint is far greater than
the impact of the added startup overhead.
(Maybe a flood argument that disables it for when
some UI wrapper already did the checking or if it's
being invoked as part of a megaconglomerate (rsh/ssh).)
* Supporting use of installed APR / APR-util
Justin says: Requires changes to APR/APR-util to make it install
the right stuff. We currently rely on the source.
* Mandrake Linux 8.0 and OpenSSL 0.9.6a just aren't coexisting at all.
The problem seems to be that OpenSSL is refusing to initialize the
PRNG. Go figure. I give up on this for now, but it is a big nasty
bug in something somewhere. This code works on Solaris/Intel.
That's all I'll say on the matter for now.
* Report Aggregation
We're not sure how to handle reporting quite yet. We'd like to keep
it open ended and flexible, but that will be difficult to do while
maintaining the ability to run a huge variety of tests.
* WebLogic 5.10 Service Pack 9
No one told BEA how to make an HTTP server. Send it Connection: Close
and a cookie, and it'll respond with Connection: Keep-Alive (no cookie
and it honors Connection: Close). That's wrong.
Last modified at [$Date: 2004-11-24 19:36:41 -0500 (Wed, 24 Nov 2004) $]
Release:
1.0: Released July 23, 2002
milestone-03: Tagged January 16, 2002
ASF-transfer: Released July 17, 2001
milestone-02: Tagged August 13, 2001
milestone-01: Tagged July 11, 2001 (tag lost during transfer)
RELEASE SHOWSTOPPERS:
* "Everything needs to work perfectly"
Other bugs that need fixing:
* I get a SIGBUS on Darwin with our examples/round-robin-ssl.xml
config, on the second URL. I'm using OpenSSL 0.9.6c 21 dec 2001.
* iPlanet sends "Content-length" - there is a hack in there now
to recognize it. However, all HTTP headers need to be normalized
before checking their values. This isn't easy to do. Grr.
* OpenSSL 0.9.6
Segfaults under high load. Upgrade to OpenSSL 0.9.6b.
Aaron says: I just found a big bug that might have been causing
this all along (we weren't closing ssl sockets).
How can I reproduce the problem you were seeing
to verify if this was the fix?
* SEGVs when /tmp/.rnd doesn't exist are bad. Make it configurable
and at least bomb with a good error message. (See Doug's patch.)
Status: This is fixed, no?
* If APR has disabled threads, flood should as well. We might want
to have an enable/disable parameter that does this also, providing
an error if threads are desired but not available.
* flood needs to clear pools more often. With a long running test
it can chew up memory very quickly. We should just bite the bullet
and create/destroy/clear pools for each level of our model:
farm, farmer, profile, url/request-cycle, etc.
* APR needs to have a unified interface for ephemeral port
exhaustion, but aparently Solaris and Linux return different
errors at the moment. Fix this in APR then take advantage of
it in flood.
* The examples/analyze-relative scripts fail when there are less
than 5 unique URLs.
Other features that need writing:
* More analysis and graphing scripts are needed
* Write robust tool (using tethereal perhaps) to take network dumps
and convert them to flood's XML format.
Status: Justin volunteers. Aaron had a script somewhere that is
a start. Jacek is working on a Mozilla application, codename
"Flood URL bag" (much like Live HTTP Headers) and small
HTTP proxy.
* Get chunked encoding support working.
Status: Justin volunteers. He got sidetracked by the httpd
implementation of input filtering and never finished
this. This is a stopgap until apr-serf is completed.
* Maybe we should make randfile and capath runtime directives that
come out of the XML, instead of autoconf parameters.
* We are using apr_os_thread_current() and getpid() in some places
when what we really want is a GUID. The GUID will be used to
correlate raw output data with each farmer. We may wish to print
a unique ID for each of farm, farmer, profile, and url to help in
postprocessing.
* We are using strtol() in some places and strtoll() in others.
Pick one (Aaron says strtol(), but he's not sure).
* Validation of responses (known C-L, specific strings in response)
Status: Justin volunteers
* HTTP error codes (ie. teach it about 302s)
Justin says: Yeah, this won't be with round_robin as implemented.
Need a linked list-based profile where we can insert
new URLs into the sequence.
* Farmer (Single-thread, multiple profiles)
Status: Aaron says: If you have threads, then any Farmer can be
run as part of any Farm. If you don't have threads, you can
currently only run one Farmer named "Joe" right now (this will
be changed so that if you don't have threads, flood will attempt
to run all Farmers in serial under one process).
* Collective (Single-host, multiple farms)
This is a number of Farms that have been fork()ed into child processes.
* Megaconglomerate (Multiple hosts each running a collective)
This is a number of Collectives running on a number of hosts, invoked
via RSH/SSH or maybe even some proprietary mechanism.
* Other types of urllists
a) Random / Random-weighted
b) Sequenced (useful with cookie propogation)
c) Round-robin
d) Chaining of the above strategies
Status: Round-robin is complete.
* Other types of reports
Status: Aaron says: "simple" reports are functional. Justin added
a new type that simply prints the approx. timestamp when
the test was run, and the result as OK/FAIL; it is called
"easy reports" (see flood_easy_reports.h).
Furthermore, simple_reports and easy_reports both print
out the current requesting URI line.
Documentation that needs writing:
* Documentation? What documentation? RTFS?
Status: Justin volunteers. He'll probably use Anakia for user
docs and doxygen for source code comments.
* Feature set
We'll have to eventually write down all the features we support,
which will most likely come out to be the various XML parameters
we support.
Available Patches:
Open issues:
* Ponder using apr-serf in flood
Status: This requires apr-serf to be written. Chicken and egg.
Ideally, apr-serf would handle buckets, filters, and
other cool stuff. However, this isn't the highest of
priorities.
* Validating XML Parser?
Justin says: I don't think we want this. We want a standalone
validator.
Aaron says: I strongly feel we should have this turned on at
least for the invoking "Megaconglomerate". The added
overhead for validating when we're already parsing
will be minimal. It will not affect the results of
the tests. It only happens when a new flood process
is created (directly or via rsh/ssh), not when invoking
a collective, farm, farmer, or profile. What it gives
us from the user's standpoint is far greater than
the impact of the added startup overhead.
(Maybe a flood argument that disables it for when
some UI wrapper already did the checking or if it's
being invoked as part of a megaconglomerate (rsh/ssh).)
* Supporting use of installed APR / APR-util
Justin says: Requires changes to APR/APR-util to make it install
the right stuff. We currently rely on the source.
* Mandrake Linux 8.0 and OpenSSL 0.9.6a just aren't coexisting at all.
The problem seems to be that OpenSSL is refusing to initialize the
PRNG. Go figure. I give up on this for now, but it is a big nasty
bug in something somewhere. This code works on Solaris/Intel.
That's all I'll say on the matter for now.
* Report Aggregation
We're not sure how to handle reporting quite yet. We'd like to keep
it open ended and flexible, but that will be difficult to do while
maintaining the ability to run a huge variety of tests.
* WebLogic 5.10 Service Pack 9
No one told BEA how to make an HTTP server. Send it Connection: Close
and a cookie, and it'll respond with Connection: Keep-Alive (no cookie
and it honors Connection: Close). That's wrong.