Age | Commit message (Collapse) | Author |
|
the existing codebase used an elaborate and complex approach for
its parallelism:
5 different config file options, namely
- MaxClients
- MinSpareServers
- MaxSpareServers
- StartServers
- MaxRequestsPerChild
were used to steer how (and how many) parallel processes tinyproxy
would spin up at start, how many processes at each point needed to
be idle, etc.
it seems all preforked processes would listen on the server port
and compete with each other about who would get assigned the new
incoming connections.
since some data needs to be shared across those processes, a half-
baked "shared memory" implementation was provided for this purpose.
that implementation used to use files in the filesystem, and since
it had a big FIXME comment, the author was well aware of how hackish
that approach was.
this entire complexity is now removed. the main thread enters
a loop which polls on the listening fds, then spins up a new
thread per connection, until the maximum number of connections
(MaxClients) is hit. this is the only of the 5 config options
left after this cleanup. since threads share the same address space,
the code necessary for shared memory access has been removed.
this means that the other 4 mentioned config option will now
produce a parse error, when encountered.
currently each thread uses a hardcoded default of 256KB per thread
for the thread stack size, which is quite lavish and should be
sufficient for even the worst C libraries, but people may want
to tweak this value to the bare minimum, thus we may provide a new
config option for this purpose in the future.
i suspect that on heavily optimized C libraries such a musl, a
stack size of 8-16 KB per thread could be sufficient.
since the existing list implementation in vector.c did not provide
a way to remove a single item from an existing list, i added my
own list implementation from my libulz library which offers this
functionality, rather than trying to add an ad-hoc, and perhaps
buggy implementation to the vector_t list code. the sblist
code is contained in an 80 line C file and as simple as it can get,
while offering good performance and is proven bugfree due to years
of use in other projects.
|
|
|
|
"@LOCALSTATEDIR@/log/tinyproxy/tinyproxy.log"
i.e. add a tinyproxy subdirectory.
This is meant to ease running tinyproxy as non-root user
the subdirectory can be used to give the tinyproxy user
write permission.
Michael
|
|
Michael
|
|
|
|
Old behaviour is preserved by passing in the environment variable
TINYPROXY_TESTS_WAIT=yes.
Michael
|
|
|
|
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
and does not connect to the server at all.
Michael
|
|
Enable spcifying HTTP protocol version on command line ( --http-version).
Enable specifying method (GET, CONNECT, ...) on the command line (--method).
Add POD documentation.
Use pod2usage() to print help message.
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
(Prepare for really parsing the request...)
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
This runs valgrind with the -q switch - i.e. the log file
tests/env/var/log/valgrind.log will only contain anything when there were
valgrind errors. (Memory leaks...)
Michael
|
|
When you want to run tinyproxy under valgrind,
set the environment variable VALGRIND to some useful
valgrind command line.
Michael
|
|
Also prepare for modularizing the testsuite.
Michael
|
|
Michael
|
|
Michael
|
|
Michael
|
|
So simply starting the server will work.
Michael
|
|
Michael
|
|
Michael
|
|
It provisions a test envirnonment, fires up the perl web server
and tinyproxy and currently makes one direct request to the
web server and one request through tinyproxy.
This will be modularized and extended in the sequel.
Michael
|
|
This should be one of the test tools for writing our testsuite.
This can be used to make direct connects to web servers like so:
webclient.pl server_ip:port /path/file.html
and to make requestis via a proxy like this:
webclient.pl proxy_ip:port http://webserver:port/path/file.html
Michael
|
|
This should be the web server to test against in the upcoming selftest suite.
This web server will evolve as the test suite grows.
Currently, it just returns a web site quoting the request and a fortune
(if fortune is installed...) for whatever request it gets.
The option to provide a document root is already present.
Michael
|