httpd-test-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Norman Tuttle <>
Subject Flood: Bug fixes and questions for developers
Date Tue, 05 Aug 2003 15:22:24 GMT
Dear fellow Flood developers:

It is beneficial to us as members of the Apache Flood community and as
developers of application testing software, using Flood as the basis for
testing web sites within an application we have developed to test
web-based software, within the context of the imminent rollout of the next
revision of Flood to the public by Apache, to try to make available as
many of the bug fixes which respond to the the bugs we find to the Apache
group, as well as provide direction towards a reworking of the Flood
architecture, which we have done in order to integrate with our entire
application as well as to provide greater functionality & efficiency. In
this context, people who have asked whether Flood can be faster may also
find a suitable answer in the solutions we provide..

Therefore, in the upcoming days, as time permits, I will try to provide
these bug fixes and potential feature improvements and efficiency-building
modifications, in exchange asking for guidance on other features which we
are trying to implement (or implement better).

-Norman Tuttle, developer, OpenDemand Systems,

Below, I have begun with some comments on various topics:

1) Bugs related to keepalives (sockets):

1a) The keepalive code in Flood is error-prone, especially when dealing
with sockets which can represent SSL or non-SSL protocols. We have made
some bug fixes AND added a patch for check_sockets() to work with SSL
sockets. Flood code is especially suspect at this point when attempting to
do keepalive where there are both SSL and non-SSL pages. I believe that I
have fixed this in our code. It may take some time to convert this to the
way the Apache team wants the code (in diff format), so I am only
providing a related fix now:

1b) Keepalive chunking issue

In April, I reported a problem with deploying Flood on Sun Solaris using
keepalive sockets. It appeared that Flood was failing on an assert in the
keepalive code, related to a chunking error. Both Justin Erenkrantz and
Aaron Bannert provided me with some ideas for resolving the issue; I
had to abandon it at the time in favor of other development but have
recently revisited it and found out what was causing the problem. Thank
you both for your assistance. It happens that the chunk length in hex
coming back is padded with extra spaces at the end, and the code currently
in Flood does not allow for this, causing a later error of failing the
assert in the keepalive code (basically saying that a CRLF has not been
found at that point). My solution has been to rewrite the
keepalive_read_chunk_size() function, basically a hex evaluator function,
from scratch as below, to be more flexibile than the one currently found
in flood_socket_keepalive.c:

/* This is really a hex evaluator function. */
static long keepalive_read_chunk_size(char *begin_chunk)
    long OutputHex=0;
    unsigned char Addend;
    while (isspace(*begin_chunk)) begin_chunk++;
    while (isxdigit(Addend=(*(begin_chunk++))))
      OutputHex=(OutputHex<<4)+((Addend & 0xF)+((Addend > '9')?9:0));
    return OutputHex;

1c) In "real life", we find the socket structure (using higher levels
accessing pointers to structures at intermediate and lower levels) to be
obfuscating and functionally difficult to deal with (even if it has a
somewhat object-oriented feel), and my next phase of development is to
make a single layer of socket flood_socket_t directly over the apr level.
But for the Flood project I intend to first publish my earlier levels of
changes from our CVS before this modification so that you can benefit from
our bug fixes without necessarily making this modification.

2) The following questions, regarding regex and responsetemplate, are
addressed to the Flood developers on the list, and those familiar with
regex (PCRE) library and regular expressions:

We're trying to use the responses coming back from the websites to fill
variables which can be used in future expressions sent back to the
website. While I understand that regular expressions should be able to
represent an expression to match including parts which represent a
variable or optional piece of information, I am not so familiar with how
Flood is using this information to feed the responsename value. For one, I
am not sure why this information is picked up by match[1], why there is an
nmatch value of 10 passed to the regexec function when picking up the
single matched value (when we are only matching for one responsename), why
a value of 2 for the initial variable name-pattern pattern match, and what
the other match[] members might represent. This will be helpful for our
application, if anyone is knowledgeable about these features.

Thanks in advance.
-Norman Tuttle, developer, OpenDemand Systems,

View raw message