Discussion:
[libtorrent] libtorrent 1.1 released
Arvid Norberg
2016-04-11 05:26:46 UTC
Permalink
You can get it here:

https://github.com/arvidn/libtorrent/releases/tag/libtorrent-1_1

Since this major release has been in the works for quite a while, the
changelog is too long to include here. Instead, here are the highlights:

* disk I/O and piece hashing can now be done in multiple threads.

* The internal allocation of alerts is a lot more efficient now, and
requires alerts to be owned by libtorrent. The pop_alerts() function that
returns a container of raw alert pointers are owned by libtorrent and will
be freed by the subsequent call to pop_alerts(). The previous alert popping
functions will still be around when deprecated functions are enabled, but
they will cause more copying and likely have worse performance.

* experimental support for BEP 38 (mutable torrents). Basically this will
attempt to merge torrents that share files.

* there's a new bdecoder which is a lot quicker than the previous
lazy_bdecode() ( http://blog.libtorrent.org/2015/03/bdecode-parsers )

* improved shutdown delay by canceling unimportant DNS lookups. (stalled
DNS lookups for tracker announces can cause significant delays when
shutting down).

* verbose logging is now done through alerts (which is possible now since
alerts are a lot more efficient). This means a production build can have
logging enabled at compile time, and enabled on demand when trouble
shooting.

* SSL over uTP connections is now supported.

* settings of various kinds have moved into the session_settings structure
(proxy settings, listen-interface, protocol encryption). A session can now
be constructed from a session_settings object, allowing for single-phase
initialization. (no more setting settings on the session object right after
constructing it).

* support for part-files. This is still a bit rough on the edges. Files
with priority 0, will have their pieces stored away in a single
consolidated file of partial pieces.

* there's been countless scalability improvements. It's possible to seed
tens of thousands, if not hundred of thousands torrents in a single
libtorrent instance. (Just make sure to use efficient APIs when interacting
with such instance, to not make yourself the bottleneck).
http://blog.libtorrent.org/2011/11/scalable-interfaces
http://blog.libtorrent.org/2012/01/seeding-a-million-torrents/

* A lot of build configuration defines have been removed or moved out of
public headers (to not affect ABI), as ABI incompatibility caused by
configuration options is a common mistake.



API compatibility:

I've tried hard to keep this release API compatible the the 1.0.x series.
If you find a function that behaves differently in 1.1, please file a
ticket on github or bring it up on the mailing list. There are definitely
cases where using deprecated APIs will have worse performance now (because
they're implemented on top of a new, higher performance, API).

There are some noteworthy exceptions though, that were hard to keep
compatible:

* Instead of using boost.intrusive_ptr<> for torrent_info objects,
boost.shared_ptr<> is used. (this is a step in the direction of adopting
std::shared_ptr).

* the storage_interface has changed, to support multi-threaded disk I/O.

* the declarations of some functions and classes have been factored out
into their own header files. You may find yourself having to include some
new headers.



Deprecated features:

* deprecated adding torrents by URL. This feature introduced a lot of
complexity and does not fit well at the libtorrent layer. It's often easier
for a client to download a .torrent file anyway, and then add it to
libtorrent.

* sparse-regions feature was removed. This was a feature that attempted to
keep the number of extents per file low, to circumvent a bug in early
versions of vista.

* deprecated RSS feeds. The API for RSS feeds was awkward and did not fit
well with libtorrent. It's likely easier for clients to use a separate RSS
feed library.

* deprecated lazy_bdecode and lazy_entry, as it's been replaced by
bdecode() and bdecode_node.

* deprecated time functions in favor of using boost.chrono.

* compact file allocation was removed (it was deprecated in 1.0 iirc)

* deprecated explicit cache feature

* deprecated resolve-countries feature (not in scope of libtorrent, can
easily be done by client)

* deprecated set_tracker_login() (to use basic auth with http trackers).

* deprecated session_status, cache_status and session::status() (use
post_session_stats() instead)
--
Arvid Norberg
Bedeho Mender
2016-04-11 15:44:34 UTC
Permalink
Fantastic work! looking forward to trying it out!

Post by Arvid Norberg
https://github.com/arvidn/libtorrent/releases/tag/libtorrent-1_1
Since this major release has been in the works for quite a while, the
* disk I/O and piece hashing can now be done in multiple threads.
* The internal allocation of alerts is a lot more efficient now, and
requires alerts to be owned by libtorrent. The pop_alerts() function that
returns a container of raw alert pointers are owned by libtorrent and will
be freed by the subsequent call to pop_alerts(). The previous alert popping
functions will still be around when deprecated functions are enabled, but
they will cause more copying and likely have worse performance.
* experimental support for BEP 38 (mutable torrents). Basically this will
attempt to merge torrents that share files.
* there's a new bdecoder which is a lot quicker than the previous
lazy_bdecode() ( http://blog.libtorrent.org/2015/03/bdecode-parsers )
* improved shutdown delay by canceling unimportant DNS lookups. (stalled
DNS lookups for tracker announces can cause significant delays when
shutting down).
* verbose logging is now done through alerts (which is possible now since
alerts are a lot more efficient). This means a production build can have
logging enabled at compile time, and enabled on demand when trouble
shooting.
* SSL over uTP connections is now supported.
* settings of various kinds have moved into the session_settings structure
(proxy settings, listen-interface, protocol encryption). A session can now
be constructed from a session_settings object, allowing for single-phase
initialization. (no more setting settings on the session object right after
constructing it).
* support for part-files. This is still a bit rough on the edges. Files
with priority 0, will have their pieces stored away in a single
consolidated file of partial pieces.
* there's been countless scalability improvements. It's possible to seed
tens of thousands, if not hundred of thousands torrents in a single
libtorrent instance. (Just make sure to use efficient APIs when interacting
with such instance, to not make yourself the bottleneck).
http://blog.libtorrent.org/2011/11/scalable-interfaces
http://blog.libtorrent.org/2012/01/seeding-a-million-torrents/
* A lot of build configuration defines have been removed or moved out of
public headers (to not affect ABI), as ABI incompatibility caused by
configuration options is a common mistake.
I've tried hard to keep this release API compatible the the 1.0.x series.
If you find a function that behaves differently in 1.1, please file a
ticket on github or bring it up on the mailing list. There are definitely
cases where using deprecated APIs will have worse performance now (because
they're implemented on top of a new, higher performance, API).
There are some noteworthy exceptions though, that were hard to keep
* Instead of using boost.intrusive_ptr<> for torrent_info objects,
boost.shared_ptr<> is used. (this is a step in the direction of adopting
std::shared_ptr).
* the storage_interface has changed, to support multi-threaded disk I/O.
* the declarations of some functions and classes have been factored out
into their own header files. You may find yourself having to include some
new headers.
* deprecated adding torrents by URL. This feature introduced a lot of
complexity and does not fit well at the libtorrent layer. It's often easier
for a client to download a .torrent file anyway, and then add it to
libtorrent.
* sparse-regions feature was removed. This was a feature that attempted to
keep the number of extents per file low, to circumvent a bug in early
versions of vista.
* deprecated RSS feeds. The API for RSS feeds was awkward and did not fit
well with libtorrent. It's likely easier for clients to use a separate RSS
feed library.
* deprecated lazy_bdecode and lazy_entry, as it's been replaced by
bdecode() and bdecode_node.
* deprecated time functions in favor of using boost.chrono.
* compact file allocation was removed (it was deprecated in 1.0 iirc)
* deprecated explicit cache feature
* deprecated resolve-countries feature (not in scope of libtorrent, can
easily be done by client)
* deprecated set_tracker_login() (to use basic auth with http trackers).
* deprecated session_status, cache_status and session::status() (use
post_session_stats() instead)
--
Arvid Norberg
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications
Manager
Applications Manager provides deep performance insights into multiple
tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial! http://pubads.g.doubleclick.net/
gampad/clk?id=1444514301&iu=/ca-pub-7940484522588532
_______________________________________________
Libtorrent-discuss mailing list
https://lists.sourceforge.net/lists/listinfo/libtorrent-discuss
Angel Leon
2016-04-11 19:59:12 UTC
Permalink
Kudos and thanks from FrostWire for this great release Arvid.
We're very, lucky, humbled and thankful to have you in the Bittorrent
community.
Post by Bedeho Mender
Fantastic work! looking forward to trying it out!

Post by Arvid Norberg
https://github.com/arvidn/libtorrent/releases/tag/libtorrent-1_1
Since this major release has been in the works for quite a while, the
* disk I/O and piece hashing can now be done in multiple threads.
* The internal allocation of alerts is a lot more efficient now, and
requires alerts to be owned by libtorrent. The pop_alerts() function that
returns a container of raw alert pointers are owned by libtorrent and
will
Post by Arvid Norberg
be freed by the subsequent call to pop_alerts(). The previous alert
popping
Post by Arvid Norberg
functions will still be around when deprecated functions are enabled, but
they will cause more copying and likely have worse performance.
* experimental support for BEP 38 (mutable torrents). Basically this will
attempt to merge torrents that share files.
* there's a new bdecoder which is a lot quicker than the previous
lazy_bdecode() ( http://blog.libtorrent.org/2015/03/bdecode-parsers )
* improved shutdown delay by canceling unimportant DNS lookups. (stalled
DNS lookups for tracker announces can cause significant delays when
shutting down).
* verbose logging is now done through alerts (which is possible now since
alerts are a lot more efficient). This means a production build can have
logging enabled at compile time, and enabled on demand when trouble
shooting.
* SSL over uTP connections is now supported.
* settings of various kinds have moved into the session_settings
structure
Post by Arvid Norberg
(proxy settings, listen-interface, protocol encryption). A session can
now
Post by Arvid Norberg
be constructed from a session_settings object, allowing for single-phase
initialization. (no more setting settings on the session object right
after
Post by Arvid Norberg
constructing it).
* support for part-files. This is still a bit rough on the edges. Files
with priority 0, will have their pieces stored away in a single
consolidated file of partial pieces.
* there's been countless scalability improvements. It's possible to seed
tens of thousands, if not hundred of thousands torrents in a single
libtorrent instance. (Just make sure to use efficient APIs when
interacting
Post by Arvid Norberg
with such instance, to not make yourself the bottleneck).
http://blog.libtorrent.org/2011/11/scalable-interfaces
http://blog.libtorrent.org/2012/01/seeding-a-million-torrents/
* A lot of build configuration defines have been removed or moved out of
public headers (to not affect ABI), as ABI incompatibility caused by
configuration options is a common mistake.
I've tried hard to keep this release API compatible the the 1.0.x series.
If you find a function that behaves differently in 1.1, please file a
ticket on github or bring it up on the mailing list. There are definitely
cases where using deprecated APIs will have worse performance now
(because
Post by Arvid Norberg
they're implemented on top of a new, higher performance, API).
There are some noteworthy exceptions though, that were hard to keep
* Instead of using boost.intrusive_ptr<> for torrent_info objects,
boost.shared_ptr<> is used. (this is a step in the direction of adopting
std::shared_ptr).
* the storage_interface has changed, to support multi-threaded disk I/O.
* the declarations of some functions and classes have been factored out
into their own header files. You may find yourself having to include some
new headers.
* deprecated adding torrents by URL. This feature introduced a lot of
complexity and does not fit well at the libtorrent layer. It's often
easier
Post by Arvid Norberg
for a client to download a .torrent file anyway, and then add it to
libtorrent.
* sparse-regions feature was removed. This was a feature that attempted
to
Post by Arvid Norberg
keep the number of extents per file low, to circumvent a bug in early
versions of vista.
* deprecated RSS feeds. The API for RSS feeds was awkward and did not fit
well with libtorrent. It's likely easier for clients to use a separate
RSS
Post by Arvid Norberg
feed library.
* deprecated lazy_bdecode and lazy_entry, as it's been replaced by
bdecode() and bdecode_node.
* deprecated time functions in favor of using boost.chrono.
* compact file allocation was removed (it was deprecated in 1.0 iirc)
* deprecated explicit cache feature
* deprecated resolve-countries feature (not in scope of libtorrent, can
easily be done by client)
* deprecated set_tracker_login() (to use basic auth with http trackers).
* deprecated session_status, cache_status and session::status() (use
post_session_stats() instead)
--
Arvid Norberg
------------------------------------------------------------------------------
Post by Arvid Norberg
Find and fix application performance issues faster with Applications
Manager
Applications Manager provides deep performance insights into multiple
tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial! http://pubads.g.doubleclick.net/
gampad/clk?id=1444514301&iu=/ca-pub-7940484522588532
_______________________________________________
Libtorrent-discuss mailing list
https://lists.sourceforge.net/lists/listinfo/libtorrent-discuss
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications
Manager
Applications Manager provides deep performance insights into multiple
tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial! http://pubads.g.doubleclick.net/
gampad/clk?id=1444514301&iu=/ca-pub-7940484522588532
<http://pubads.g.doubleclick.net/gampad/clk?id=1444514301&iu=/ca-pub-7940484522588532>
_______________________________________________
Libtorrent-discuss mailing list
https://lists.sourceforge.net/lists/listinfo/libtorrent-discuss
Loading...