fp/apps/aquatic/CHANGELOG.md

207 lines
5.9 KiB
Markdown
Raw Normal View History

# Changelog
## Unreleased
### aquatic_udp
#### Changed
* (Breaking) Open one socket each for IPv4 and IPv6. The config file now has
one setting for each.
### aquatic_http
#### Changed
* (Breaking) Open one socket each for IPv4 and IPv6. The config file now has
one setting for each.
## 0.9.0 - 2024-04-03
### General
#### Added
* Add `aquatic_peer_id` crate with peer client information logic
* Add `aquatic_bencher` crate for automated benchmarking of aquatic and other
BitTorrent trackers
### aquatic_udp
#### Added
* Add support for reporting peer client information
#### Changed
* Switch from socket worker/swarm worker division to a single type of worker,
for performance reasons. Several config file keys were removed since they
are no longer needed.
* Index peers by packet source IP and provided port, instead of by peer_id.
This prevents users from impersonating others and is likely also slightly
faster for IPv4 peers.
* Avoid a heap allocation for torrents with two or less peers. This can save
a lot of memory if many torrents are tracked
* Improve announce performance by avoiding having to filter response peers
* In announce response statistics, don't include announcing peer
* Harden ConnectionValidator to make IP spoofing even more costly
* Remove config key `network.poll_event_capacity` (always use 1)
* Speed up parsing and serialization of requests and responses by using
[zerocopy](https://crates.io/crates/zerocopy)
* Report socket worker related prometheus stats per worker
* Remove CPU pinning support
#### Fixed
* Quit whole application if any worker thread quits
* Disallow announce requests with port value of 0
* Fix io_uring UB issues
### aquatic_http
#### Added
* Reload TLS certificate (and key) on SIGUSR1
* Support running without TLS
* Support running behind reverse proxy
#### Changed
* Index peers by packet source IP and provided port instead of by source ip
and peer id. This is likely slightly faster.
* Avoid a heap allocation for torrents with four or less peers. This can save
a lot of memory if many torrents are tracked
* Improve announce performance by avoiding having to filter response peers
* In announce response statistics, don't include announcing peer
* Remove CPU pinning support
#### Fixed
* Fix bug where clean up after closing connections wasn't always done
* Quit whole application if any worker thread quits
* Fix panic when sending failure response when running with metrics behind
reverse proxy
* Don't always close connections after sending failure response
### aquatic_ws
#### Added
* Add support for reporting peer client information
* Reload TLS certificate (and key) on SIGUSR1
* Keep track of which offers peers have sent and only allow matching answers
#### Changed
* A response is no longer generated when peers announce with AnnounceEvent::Stopped
* Compiling with SIMD extensions enabled is no longer required, due to the
addition of runtime detection to simd-json
* Only consider announce and scrape responses as signs of connection still
being alive. Previously, all messages sent to peer were considered.
* Decrease default max_peer_age and max_connection_idle config values
* Remove CPU pinning support
#### Fixed
* Fix memory leak
* Fix bug where clean up after closing connections wasn't always done
* Fix double counting of error responses
* Actually close connections that are too slow to send responses to
* If peers announce with AnnounceEvent::Stopped, allow them to later announce on
same torrent with different peer_id
* Quit whole application if any worker thread quits
## 0.8.0 - 2023-03-17
### General
#### Added
* Support exposing a Prometheus endpoint for metrics
* Add cli flag for printing parsed config
* Add `aquatic_http_private`, an experiment for integrating with private trackers
#### Changed
* Rename request workers to swarm workers
* Switch to thin LTO for faster compile times
* Use proper workspace path declarations instead of workspace patch section
* Use [Rust 1.64 workspace inheritance](https://blog.rust-lang.org/2022/09/22/Rust-1.64.0.html)
* Reduce space taken by ValidUntil struct from 128 to 32 bits, reducing memory
consumption for each stored peer by same amount
* Use regular indexmap instead of amortized-indexmap. This goes for torrent,
peer and pending scrape response maps
* Improve privilege dropping
* Quit whole program if any thread panics
* Update dependencies
#### Fixed
* Forbid unrecognized keys when parsing config files
* Stop including invalid avx512 key in `./scripts/env-native-cpu-without-avx-512`
### aquatic_udp
#### Added
* Add experimental io_uring backend with higher throughput
* Add optional response resend buffer for use on on operating systems that
don't buffer outgoing UDP traffic
* Add optional extended statistics (peers per torrent histogram)
* Add Dockerfile to make it easier to get started
#### Changed
* Replace ConnectionMap with BLAKE3-based connection validator, greatly
decreasing memory consumtion
* Don't return any response peers if announce event is stopped
* Ignore requests with source port value of zero
#### Fixed
* When calculating bandwidth statistics, include size of protocol headers
### aquatic_http
#### Changed
* Don't return any response peers if announce event is stopped
### aquatic_http_protocol
#### Fixed
* Explicity check for /scrape path
* Return NeedMoreData until headers are fully parsed
* Fix issues with ScrapeRequest::write and AnnounceRequest::write
* Expose write and parse methods for subtypes
### aquatic_http_load_test
#### Changed
* Exclusively use TLS 1.3
### aquatic_ws
#### Added
* Add HTTP health check route when running without TLS
#### Changed
* Make TLS optional
* Support reverse proxies
* Reduce size of various structs
#### Fixed
* Remove peer from swarms immediately when connection is closed
* Allow peers to use multiple peer IDs, as long as they only use one per info hash
### aquatic_ws_load_test
#### Changed
* Exclusively use TLS 1.3