Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

212 lines (161 sloc) 9.038 kb
Version 1.2.0:
This version sees a number of new highlights:
* (Magnus Klaar) A complete DHT implementation. This is outstanding
work. Note that it should be disabled if you use private
trackers. We don't heed the private-flag yet (BEP-27)
* (Magnus Klaar) A completely new disk IO layer which is more parallel
than the old one. Needless to say, it is much faster.
* Further work via rebars release handler now lets us build proper releases,
for production and/or development (See the file for
* Support for BEP-15: Udp tracker protocol
* Support for BEP-12: Multitracker protocol
* Numerous improvement to the webUI.
* Etorrent now persists the amount of upload and download over sessions.
This fixes correct ratios even across stops/starts of etorrent.
* Use the riak_err error handler. This plugs a bug where death of many
processes would make SASL use too much memory.
* Remove mnesia from the code base. The new system is running entirely on
* Performance improvements in hot parts of the code.
* Begin adding tests to the code, EUnit and Erlang QuickCheck mini.
* Add profiling via eprof as a tunable knob.
* Fix an outstanding bug in the choker code. Etorrent is now much better
at giving back.
* Fix a race condition on the gproc table.
* Improve supervisor tree shutdown
* Change the bcoding module to be less defensive and more erlang-like
* Change from uwiger/gproc to esl/gproc.
* Numerous fixes to robustness regarding slow disks.
Version 1.1.2:
Build system restructuring,
* This version adds support for a new build system. The README has
been updated with the information about how to build the software
now. Compared to earlier, we can now build a release which is a
stand-alone version of Erlang/OTP and etorrent bundled up nicely.
* Locations of log files has been vastly improved.
* Magnus Klaars work on DHT has been included. It is not prime-time
ready yet, but it is a start.
Version 1.1.1:
Small quick bugfix release,
* Include etorrent.erl, which was not tracked by the repository.
Version 1.1.0:
In this version, we have mostly cleaned up some code paths to make
room for further improvements and adaptations. From v1.0.0 we have the
following important changes:
* Add boxplots next to the sparklines in the WebUI. Boxplots will
quickly tell you the current speed of a torrent file which is
being processed by etorrent.
* Add backwards compatibility for Erlang R13B-x.
* Change the chunk_mgr ETS table to a bag rather than a set. We used
bag semantics by implementing them as lists anyway and there is a
slight improvement in letting the C-code handle the bag. It also
shaves off about 50 lines of code.
* Use gproc for process registration. This greatly simplifies the
code at the expensive of a dependency on gproc and gen_leader
(gen_leader we don't use for anything, but gproc needs).
* API calls are now again called etorrent:h() and such. Moved from
the application code in etorrent_app.
* Fix a bug in the WebUI where an icon was referenced incorrectly.
Furthermore, we now support some new bittorrent protocol extensions:
* Support for extended messaging (BEP-10).
* Support for multi-tracker torrents (BEP-12). To be really useful,
we also need support for BEP-15 which is UDP tracking.
Version 1.0.1:
Minor bug-fix release:
* (WebUI) Sparklines are reset properly when torrents complete
* (WebUI) Boxplots beside the sparklines.
* (Bug) Tracker is now correctly told about completion.
* (Bug) Up/Downloaded is now reported as the concensus in the BT community.
Version 1.0:
First release I admit others might find useful. It is also the first release
in 2 years. Again, we incrementally improve over the latest release by
increasing overall robustness of the application. CPU usage and Memory usage
has in general been improved in this release.
(Tuncer Ayaz): Estimate the ETA of torrents. Guess at when they are done.
When processes are stopping, correctly clean up ETS tables. The solution we
use is to place monitors on key processes. Bookkeeping processes then act on
'DOWN' messages and remove ETS entries again.
All module-exported functions now have edoc tags and -spec entries.
We now use rebar for building the application. To come is a standalone-node
provisioning. For now the 'run' makefile target is to be used. Also adapt the
file layout mandated by rebar.
Adaptive active/passive sockets. When a peer is slow, we manage the socket
ourselves. This gives fine granularity of its speed. When the peer socket
jumps above a high watermark, it is made active, pushing the overhead to the
C-layer of the VM.
Use an LRU-replacement scheme on open files. Limit the number of open files
to 128 at once. This enables torrents with more than 1024 - OPEN_SOCKETS
files to be downloaded.
Add a WebUI. The inets server provides a simple RPC-service for a primarily
Javascript-enabled web-frontend. It can only display the basic overview at
the moment, but it should be easy to extend with new functionality.
Numerous additional code cleanups here and there. It should be even easier to
read and understand now.
Make GitHub the official repository place:
Use for issues. Issues can be voted
on, so if one prefers one thing over the other, don't hesitate to hint me :)
Version 0.9:
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
new release.
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
at times.
- 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
size initially.
- 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
passive/active sockets.
- 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.
Version 0.8:
First Technology Preview.
Jump to Line
Something went wrong with that request. Please try again.