| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 39 hours | Retire the busy network tracker. /24 networks don't say anything anymore in 2026 and in v6 it was broken from the beginning | Dirk Engling | |
| 3 days | Unify the peerlists for v4 and v6 | Dirk Engling | |
| This commit finishes what started with unifying v4 and v6 trackers, from then on, torrents carried a peer list per family, with obvious redundancies. With the race to save memory, these became burdening enough that now these peerlist pointers have been moved into a single struct, holding both v4 and v6 peers in their respective ot_vectors, so the per- torrent cost shrunk by another pointer's size. Each peerlist also lost its peer count cache, as in most cases, it's trivial to load it directly from the ot_vector's entry count. The seed counts that were kept per family only to be aggregated later for every consumer, are also merged now. Total savings depend on the tracker's actual load. In some corner cases, where only one address family dominates the torrents, we actually use a few bytes more in the ot_vector for the absent family, but even that mostly becomes noise: before it actually adds to the memory load, the peer payload will be the deciding factor. Most wins are on what often is experienced on trackers: A long tail of abandoned torrents now needs eight fewer bytes, slipping into a smaller allocation unit on glibc's allocator. | |||
| 3 days | Add a knob to help reducing memory consumption. This time: empty torrents may expire sooner | Dirk Engling | |
| 3 days | Fix s24s stats to ensure no unallocated vector is dereferenced. Drive-by fix for the ip= scanner in the http parser | Dirk Engling | |
| 3 days | Start to opentracker's memory requirements | Dirk Engling | |
| * peer lists for v4 and v6 are now lazily allocated and, more importantly, will be freed once there are no more peers * The downloaded count is now per torrent and not per peer list anymore, moving in what was alignment loss, anyway * The (now) per torrent downloaded and the per peer list peer and seed count shrunk from size_t to uint32_t * A helper guards accesses to the peer and seed count to prevent null pointer dereferences * The base time also shrank from time_t to uint32_t, minutes since the epoch currently fits in 25 bits | |||
| 4 days | Fix a theoretical bug where a short request packet yields an oob read | Dirk Engling | |
| 4 days | Fix an accesslist reload issue where an empty-but-present changeset after a reload could potentially walk a NULL array | Dirk Engling | |
| 4 days | Fix: livesync watermark used sizeof(ot_peer) which is a byte. Clamping on copy length now | Dirk Engling | |
| 4 days | Gives urlencoded_parse a destination bound | Dirk Engling | |
| 4 days | Add a wall clock helper so that statedumps can be written and re-read | Dirk Engling | |
| 4 days | Bound what load_state will accept for an age | Dirk Engling | |
| 4 days | Stop reading a connection a worker has taken over | Dirk Engling | |
| 5 days | Answer blacklisted torrent announces with an empty packet, that carries a re-announce timeout | Dirk Engling | |
| 5 days | Start live sync where main knows the state file is in | Dirk Engling | |
| 5 days | Read the accesslist before any consumer consults it | Dirk Engling | |
| 5 days | Fix: Restoring a state file doubled every completed count | Dirk Engling | |
| 5 days | Take the clock off the wall | Dirk Engling | |
| 5 days | Clamp every elapsed time span at zero, using a set of helper functions | Dirk Engling | |
| 7 days | Refuse to start on a listen statement that does not parse | Dirk Engling | |
| 7 days | Refuse to start on a livesync.cluster.group that is not one | Dirk Engling | |
| 7 days | Let a user pick their cluster's own multicast group | Dirk Engling | |
| 7 days | Let a tracker with live sync built in run without a cluster | Dirk Engling | |
| 7 days | Give the live sync worker a real workstruct | Dirk Engling | |
| 7 days | Add integration tests for live sync | Dirk Engling | |
| 8 days | Retire old perl backend to the proxy, but don't delete it yet | Dirk Engling | |
| 8 days | Turn the bucket count into a knob, but keep cleaner wake-ups at a constant rate | Dirk Engling | |
| 8 days | Sweep the obsolete CVS Id keyword out of the tree | Dirk Engling | |
| 8 days | Remove tracker id from stats, as well | Dirk Engling | |
| 8 days | Remove version string from what is reported over http | Dirk Engling | |
| 8 days | add test for the version report fascilities | Dirk Engling | |
| 8 days | Prepare a versioning mechanism for the tracker that works from tarballs | Dirk Engling | |
| 9 days | Live logging networks was defunc for a while, does not work with v6, so we remove it | Dirk Engling | |
| 9 days | Add some tests for the actual trackerlogic, something I put off for too long | Dirk Engling | |
| 9 days | Add tests for the ot_mutex code, it didn't have any until now | Dirk Engling | |
| 10 days | Make the dynamic accesslist readers release their line buffer and properly exit | Dirk Engling | |
| 10 days | Refactor ot_workqueue out of ot_mutex, no behaviour change | Dirk Engling | |
| 10 days | 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. | |||
| 10 days | Add test for new config params | Dirk Engling | |
| 10 days | Add config parsers for multiple tcp socket readers and a helper to see if we can offer it on the platform | Dirk Engling | |
| 11 days | Introduce a fast path assuming that a tcp connection's payload already has arrived at accept time | Dirk Engling | |
| 11 days | Fix idle tests in presence of an accept filter | Dirk Engling | |
| 11 days | Fix expiry tests under the new accept filters | Dirk Engling | |
| 11 days | Defer accepts until some data actually is there | Dirk Engling | |
| 11 days | Reduce syscalls and add helper to count them | Dirk Engling | |
| 11 days | Add an http load generator | Dirk Engling | |
| 11 days | Check for free port in the udp integration test, also speed it up by a bit | Dirk Engling | |
| 11 days | Consolidate all tcp/http tear down into a single http_close function to prevent a rare UAF for expiring connections | Dirk Engling | |
| 12 days | add wake-up tester that helped figuring out how to tickle hanging udp readers | Dirk Engling | |
| 12 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 | |
| 12 days | Fix a test that would over-report success rate when losing the race for cycles to the test target | Dirk Engling | |
