| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 49 min. | Make the dynamic accesslist readers release their line buffer and properly exitHEADmaster | Dirk Engling | |
| 105 min. | Refactor ot_workqueue out of ot_mutex, no behaviour change | Dirk Engling | |
| 5 hours | Make tcp worker multithreaded, too | Dirk Engling | |
| This shamelessly steals the model established in the UDP workers, i.e. if the kernel is able to bind multiple listening sockets to the same endpoint, we will share them across threads. If it can't, all threads will accept on the same socket. The fast path handles most of the connections, only the rare case of no data yet on the socket is offloaded to the slow path (which used to be the mainloop) for completion. This scales nicely, as the higher the load is, the higher chances are that an accept happens only after the network roundtrip to the peer completes, leading to more connections that already have data waiting for us. We also consolidate the workstruct init and deinit code, preparation for later unifying all thread state structs for all protocols (mca, udc and tcp). The config file gains a per tcp connection worker count and some docs explaining what this knob buys and costs, nudging the user to either keep it 0 or dial it up to at least 2. | |||
| 20 hours | Add test for new config params | Dirk Engling | |
| 20 hours | Add config parsers for multiple tcp socket readers and a helper to see if we can offer it on the platform | Dirk Engling | |
| 21 hours | Introduce a fast path assuming that a tcp connection's payload already has arrived at accept time | Dirk Engling | |
| 27 hours | Fix idle tests in presence of an accept filter | Dirk Engling | |
| 28 hours | Fix expiry tests under the new accept filters | Dirk Engling | |
| 31 hours | Defer accepts until some data actually is there | Dirk Engling | |
| 41 hours | Reduce syscalls and add helper to count them | Dirk Engling | |
| 42 hours | Add an http load generator | Dirk Engling | |
| 43 hours | Check for free port in the udp integration test, also speed it up by a bit | Dirk Engling | |
| 44 hours | Consolidate all tcp/http tear down into a single http_close function to prevent a rare UAF for expiring connections | Dirk Engling | |
| 3 days | add wake-up tester that helped figuring out how to tickle hanging udp readers | Dirk Engling | |
| 3 days | Revert last wake-up experiment. Having each udp worker wake up once a second to check if the tracker stops is wasteful | Dirk Engling | |
| 3 days | Fix a test that would over-report success rate when losing the race for cycles to the test target | Dirk Engling | |
| 3 days | With more workers blockingly waiting on udp sockets, we need to keep track of all sockets to shut them down on exit | Dirk Engling | |
| 3 days | Let the load tester log losses to better gauge performance | Dirk Engling | |
| 3 days | Add load tests to sanitize check the trackerlogic, based on udp requests | Dirk Engling | |
| 4 days | The main event loop(s) now also catch an EINTR and return instead of blocking | Dirk Engling | |
| 4 days | Add concurrency test | Dirk Engling | |
| 4 days | All OSes now do have a cheap monotonic clock, so no caching thread is needed. Also add some relative time helpers | Dirk Engling | |
| 5 days | Add test for the revived keep alive | Dirk Engling | |
| 5 days | Fix some tests to match retired stats modes and wrong config file ordering | Dirk Engling | |
| 5 days | Add test for the correct order of partial scrapes | Dirk Engling | |
| 5 days | Add test for the error packet when a hash is blacklisted (the part I forgot in last commit) | Dirk Engling | |
| 5 days | Add test for the error packet when a hash is blacklisted | Dirk Engling | |
| 5 days | Add new test for connection keep alive | Dirk Engling | |
| 5 days | retrieve the address of the sending socket for comparison. In jails it might be forced to its primary address | Dirk Engling | |
| 5 days | Adding the actual tests to do aforementioned 'Massively increase coverage by pulling fullscrapes and sending udp packets' | Dirk Engling | |
| 5 days | Massively increase coverage by pulling fullscrapes and sending udp packets | Dirk Engling | |
| 5 days | add more checkers to the sanitizer and integration check runs | Dirk Engling | |
| 5 days | Avoid an UB of adding NULL + 0 by keeping an offset instead of advancing the pointer into a vector struct | Dirk Engling | |
| 5 days | Add integration test and its runner | Dirk Engling | |
| 5 days | replace all calls to sprintf with a format helper that advances a cursor. Also convert the meta-formatter (i.e. results printer) to this scheme | Dirk Engling | |
| 5 days | Replace libowfat's event waiter with our own abstraction | Dirk Engling | |
| It's with a heavy heart that I remove libowfat as my event library from opentracker. libowfat is what taught opentracker to walk and then fly. The tracker was literally standing on the shoulder of giants when I started writing it in 2006. For its time, the event abstraction was unparalleled and it has held up for many years, and it served the bittorrent community greatly. https://erdgeist.org/gitweb/opentracker/commit/?id=ad472597c569568bad0526d116b601dfcb36638c Unfortunately, it is very likely that libowfat will not be maintained anymore for the foreseeable future, it is already not easy to get its source from upstream and opentracker started receiving bug reports that I can not reasonably answer or patch. Before the project gets more dependent on the limitations of libowfat's current state, I need to teach opentracker to stand on its own feet and fly by itself. I've learned a great deal in the process and have even more respect now for what libowfat pioneered. The path for opentracker is cleared now. Ground work has already been laid in the migration process to support multi threaded http processing while keeping the aggressive reduction of syscalls alive that made the libowfat+opentracker combo so scalable. Here be some dragons, though: Even though there is a unit test suite now, the event loop's rewrite has not been battle tested yet. So you might want to hold up for a bit before jumping on the solo band wagon. What awaits at the end will be a long overdue v1.0, which will be named in honour of Felix. | |||
| 5 days | Add poll/epoll/kqueue wrapper to wait for events | Dirk Engling | |
| 5 days | Third run of making variable and function names more readable, integer scans and ip parsers | Dirk Engling | |
| 5 days | Second run of making variable and function names more readable, urlencoder now matches overall naming scheme | Dirk Engling | |
| 5 days | First run of making variable names more readable | Dirk Engling | |
| 5 days | Introduce a sub system that can store io cookies for file descriptors, thread safely so | Dirk Engling | |
| 6 days | Replace libowfat's iobatch with our own smaller (and probably only temporary) ot_batch | Dirk Engling | |
| 6 days | Add mutex unit test | Dirk Engling | |
| 6 days | Be stricter about const char*, Wwrite-strings will warn in the future and we don't want to try to overwrite string literals | Dirk Engling | |
| 6 days | Decouple config parsing from binding and worker spawning | Dirk Engling | |
| * Options are parsed now into a listener description list before binding them at once and starting the workers later * UDP workers can now be configured per connection * socket reuse is now done more sensibly, mcast sockets always reused * Hold-off logic after spawning udp workers removed | |||
| 6 days | Clean up peer re-distribution between single bucket vectors and bucket lists, add tests | Dirk Engling | |
| 7 days | Drop dead test helper | Dirk Engling | |
| 7 days | Remove test for length only mode of the url escaper | Dirk Engling | |
| 7 days | Add sub system to abstract low level multi platform socket handling ourselves | Dirk Engling | |
| 7 days | Replace libowfat's ip scanner and formatters with own own | Dirk Engling | |
