aquatic/TODO.md
Joakim Frostegård a399629b69 Update TODO
2022-08-01 15:58:48 +02:00

3.1 KiB

TODO

High priority

Medium priority

  • Consider replacing unmaintained indexmap-amortized with plain indexmap

  • Run cargo-fuzz on protocol crates

  • quit whole program if any thread panics

    • But it would be nice not to panic in workers, but to return errors instead. Once JoinHandle::is_finished is available in stable Rust (#90470), an option would be to
      • Save JoinHandles
      • When preparing to quit because of PanicSentinel sending SIGTERM, loop through them, extract error and log it
  • Run cargo-deny in CI

  • udp: add IP blocklist, which would be more flexible than just adding option for disallowing requests (claiming to be) from localhost

  • stagger cleaning tasks?

  • aquatic_ws

    • Add cleaning task for ConnectionHandle.announced_info_hashes?
    • RES memory still high after traffic stops, even if torrent maps and connection slabs go down to 0 len and capacity
      • replacing indexmap_amortized / simd_json with equivalents doesn't help
    • SinkExt::send maybe doesn't wake up properly?
    • Consider using simd-json known-key feature
  • aquatic_http_private

    • Consider not setting Content-type: text/plain for responses and send vec as default octet stream instead
    • stored procedure
      • test ip format
      • check user token length
    • site will likely want num_seeders and num_leechers for all torrents..
  • extract_response_peers

    • don't assume requesting peer is in list?

Low priority

  • aquatic_udp

    • what poll event capacity is actually needed?
    • load test
      • move additional request sending to for each received response, maybe with probability 0.2
  • aquatic_ws

    • large amount of temporary allocations in serialize_20_bytes, pretty many in deserialize_20_bytes
  • so_attach_reuseport_cbpf

  • extract response peers: extract "one extra" to compensate for removal, of sender if present in selection?

Not important

  • aquatic_http:

    • consider better error type for request parsing, so that better error messages can be sent back (e.g., "full scrapes are not supported")
    • test torrent transfer with real clients
      • scrape: does it work (serialization etc), and with multiple hashes?
      • 'left' optional in magnet requests? Probably not. Transmission sends huge positive number.
  • aquatic_ws

    • write new version of extract_response_peers which checks for equality with peer sending request???

Don't do

  • general: PGO didn't seem to help way back

aquatic_http

  • request from path:
    • deserialize 20 bytes: possibly rewrite (just check length of underlying bytes == 20 and then copy them), also maybe remove String from map for these cases too. doesn't really improve performance
    • crazy http parsing: check for newline with memchr, take slice until there. then iter over space newlines/just take relevant data. Not faster than httparse and a lot worse

aquatic_udp_protocol