Skip to content

Latest commit

 

History

History
190 lines (131 loc) · 5.63 KB

CHANGELOG.md

File metadata and controls

190 lines (131 loc) · 5.63 KB

Changelog

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
  • 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
  • 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