Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
108 lines (90 sloc) 4.44 KB
%%% Local Variables:
%%% mode: todoo
%%% End:
----------------------------------------------------------------------
-- This is a list of what To Do before a release is ready to be made.
-- Keep the style please. Can be read with emacs org-mode
----------------------------------------------------------------------
* Who clean up what? [Milestone: 1.0]
Go through each table and decide who "owns" the right to clean it
up. It should definitely be checked.
* etorrent_t_sup: Just start everything right away? [Milestone: 1.1]
Rather than having the code start things one at a time from the
Control, it is much more robust just to have etorrent_t_sup start
everything right away.
Think about restarts!
* It takes too much space to use #chunk_data [Milestone: 1.1]
To fix this we can move store_chunk down and make it into an FS
operation. That way we should be able to do it much much simpler
than now. We also get rid of the store_piece call in
etorrent_piece. All in all, the code will be much much simpler that
way and will not have to keep that much data in memory.
* Profile and minimize the critical path [Milestone: 1.1]
It looks like the critical path takes a wee bit too many clock
cycles. It might be possible to cut it down considerably by
profiling and optimizing that path.
I want to do something about it, but not right now. Hence in
Milestone 1.1.
* Use passive sockets [Milestone: 1.1]
We need to use passive sockets at some point. The reason is that
active sockets have no flow control, and the granularity of whole
packets are bad from a choke/unchoke perspective. The code that
needs change is rather contained, luckily, and can be placed in
peer_communication.
An even more sinister idea: change to active sockets when the rate
of the peer exceeds a certain set amount to cut down the amount of
processing needed. We *do* have some flow control as a peer will
only send things we requested, so a peer can't overflow us by more
than that anyway.
* DOCUMENTATION!
- Pick functions at random, and document what they are doing.
It is /especially/ important to document library calls and
non-standard internal functions in OTP modules.
* TorrentPeerMaster [Milestone: not decided]
- Figure out a better choking/unchoking algorithm.
The current algorithm is the original one. We should look for a
better algorithm and implement that. Suggestions for digging:
** Azureus
** Mainline
** Bittornado
** rtorrent
* Cleanups
- Decide what to do if we connect multiply to the same IP
* Temporary IP-ban on errors [Milestone: 1.1]
If we find an error on a given peer, ban him temporarily for some
time.
* ROBUSTNESS [Milestone: 1.2]
- In general, robustness is not really taken care of. We ought to make
the system more robust by not relying so much on Pids etc.
- What happens if process X dies
Go through all processes, and think about what happens if it
dies. Ensure that the system is robust.
- List of processes to check for it:
etorrent_acceptor.erl etorrent_sup.erl
etorrent_acceptor_sup.erl etorrent_t_control.erl
etorrent_bcoding.erl etorrent_t_manager.erl
etorrent_chunk.erl etorrent_torrent.erl
etorrent_dirwatcher.erl etorrent_t_peer_group.erl
etorrent_dirwatcher_sup.erl etorrent_t_peer_pool_sup.erl
etorrent.erl
etorrent_event.erl etorrent_t_peer_send.erl
etorrent_fs_checker.erl etorrent_t_pool_sup.erl
etorrent_fs.erl etorrent_tracker_communication.erl
etorrent_fs_pool_sup.erl etorrent_tracking_map.erl
etorrent_t_sup.erl
etorrent_listener.erl etorrent_utils.erl
etorrent_metainfo.erl etorrent_version.hrl
etorrent_mnesia_init.erl http_gzip.erl
etorrent_mnesia_table.hrl
etorrent_peer_communication.erl
etorrent_peer.erl tr.erl
etorrent_piece.erl
* Add another state for #piece records [Milestone: 1.2]
The state 'chunked_no_left' should indicate that the piece has been
chunked, but there are no chunks left to pick from it. The state is
introduced when we empty the #chunk record with not_fetched for the
#piece and it is reintroduced in putback_chunks so we may again
pick from it. Also, in the endgame, we should pick off from this
state.
It turns out to be an optimization, so put it into 1.2 for now. It
is not obvious that it will give anything.