[erlang-questions] [ANNOUNCE] etorrent v0.9
Jesper Louis Andersen
Wed Jul 16 18:07:25 CEST 2008
I am happy to announce etorrent v0.9, another beta-release of a
bittorrent client for Erlang. Many improvements have happened in the
source code and the new version works better than the old one. While
we have added functionality, the number of code lines is pretty stable
because many things could be shaved away. ohloh.net reports some 3400
lines of code in this release, not counting comments.
You will find that this release acts much better than v0.8. We begun
attacking the parts of the bittorrent protocol that are not specified,
but absolutely necessary if one wants adequate performance from the
The ETA for v1.0 is currently unknown. It will take more time than the
transition v0.8 --> v0.9 though.
And finally the shameless plug: I need a half-time job around the
Copenhagen area in Denmark. And of course, an Erlang (or another
functional programming) job would be preferred. Mail me, and we might
be able to cook something up.
Main web page: http://code.google.com/p/etorrent/
Git repository: http://repo.or.cz/w/etorrent.git
This is yet another Tech. Preview release. The torrent client works
to the point where it can be used to download things, but it have
not seen much testing yet and there are numerous places it can be
improved still. Yet, there are so many changes, that it warrants a
The current regressions revolve around a high CPU usage at times. We
expect to tackle this problem next with some profiling. We also
expect to tackle fast resume support as the main "new thing". And
some 10 things in the issue tracker and the TODO lists for the
next release. I don't expect it to follow as fast as this one.
One development methodology change worth mentioning: the git
repository now uses several branches laid out as described in
doc/git.txt. Tracking the 'master' branch ought to provide you with
a system that is stable at all times, while tracking the 'next'
branch gives you the 'cooking pot' of new things that ought to be
tested. We'll try to keep 'next' stable, though it may have problems
- There is a set of new commands for viewing what is currently
cooking in the torrent client. etorrent:l/0, etorrent:s/1,
etorrent:h/0. Implemented with help from Tuncer Ayaz.
- Changed build infrastructure. No more autoconf. It simplifies the
build structure considerably. Introduce the use of EMakefile for
building the erlang parts of the system. Reinstate all make targets
and add a 'tags' target for building a TAGS file.
- etorrent now correctly handles the 'min_interval' tracker response
parameter. It is not strictly part of the spec, but everybody uses
- Add support for installing etorrent. A shell-script, etorrentctl,
is provided to control the etorrent daemon. The installer, while
overly simple, has not seen much testing as of yet and may not
work. It will be tested before v1.0.
- etorrent no longer pre-fills files it want to download with
junk. It uses the semantics of fseek() to make a file of the right
- several ETS restructurings has brought the memory use
down. Before, etorrent would take some 660 megabytes of memory
running 20 torrents. Now it is more like 50-80 megabytes for 20
torrents. More can be shaved but this is a good start. Also, memory
usage still occasionally spikes because we are doing nothing in certain
situations to limit it.
- New choking/unchoking algorithm, based on a combination of
BitTornado/BitTorrent/Transmission. This is not the smartest one can
do, but it follows the spec more or less precisely.
- Event Publisher. A gen_event OTP behaviour one can subscribe to and
get information about the system. A logfile subscriber is there by
- Rate calculation optimizations. etorrent now uses a running
average over a period of up to 20 seconds to measure the rate of a
peer. This yields a more fair measurement of individual peers so we
claim the best peers. While here, change the sockets to be passive
for now. It bumps the CPU-usage, but makes the rate calculation more
precise. There are several optimizations possible revolving around
- Robustize the supervisor tree. etorrent is now less likely to die
due to a crash somewhere in the tree. It is not entirely safe yet,
but it will be during the next releases.
More information about the erlang-questions