Now that Snark has proper exception handling, use it.
This commit is contained in:
@@ -22,8 +22,11 @@ public class TorrentDownloader extends Downloader
|
||||
for (Resource resource : resources) {
|
||||
String url = resource.getRemote().toString() + ".torrent";
|
||||
Snark snark = new Snark(url, null, -1, null, null);
|
||||
snark.command_interpreter = false;
|
||||
SnarkShutdown snarkStopper = new SnarkShutdown(snark.storage,
|
||||
snark.coordinator, snark.acceptor, snark.trackerclient, null);
|
||||
Runtime.getRuntime().addShutdownHook(snarkStopper);
|
||||
_torrentmap.put(resource, snark);
|
||||
_stoppermap.put(resource, snarkStopper);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,11 +39,9 @@ public class TorrentDownloader extends Downloader
|
||||
try {
|
||||
snark.setupNetwork();
|
||||
length = snark.meta.getTotalLength();
|
||||
} catch (Exception e) {
|
||||
// Unfortunately, the snark library does System.exit(-1) right now
|
||||
// instead of properly passing the exception up the chain.
|
||||
} catch (IOException ioe) {
|
||||
Log.warning("Bittorrent failed, falling back to HTTP");
|
||||
snark.shutdown();
|
||||
_stoppermap.get(rsrc).run();
|
||||
_fallback = new HTTPDownloader(_resources, _obs);
|
||||
length = _fallback.checkSize(rsrc);
|
||||
}
|
||||
@@ -56,10 +57,8 @@ public class TorrentDownloader extends Downloader
|
||||
return;
|
||||
}
|
||||
Snark snark = _torrentmap.get(rsrc);
|
||||
SnarkShutdown snarkStopper = _stoppermap.get(rsrc);
|
||||
snark.collectPieces();
|
||||
SnarkShutdown snarkhook = new SnarkShutdown(snark.storage,
|
||||
snark.coordinator, snark.acceptor, snark.trackerclient, snark);
|
||||
Runtime.getRuntime().addShutdownHook(snarkhook);
|
||||
while (_currentSize != snark.meta.getTotalLength()) {
|
||||
long now = System.currentTimeMillis();
|
||||
if ((now - _lastUpdate) >= UPDATE_DELAY) {
|
||||
@@ -67,7 +66,7 @@ public class TorrentDownloader extends Downloader
|
||||
if (_currentSize < SIZE_THRESHOLD &&
|
||||
(now - _start) >= TIME_THRESHOLD) {
|
||||
// The download isn't going as planned, abort;
|
||||
snark.shutdown();
|
||||
snarkStopper.run();
|
||||
_fallback = new HTTPDownloader(_resources, _obs);
|
||||
_fallback.doDownload(rsrc);
|
||||
return;
|
||||
@@ -75,13 +74,17 @@ public class TorrentDownloader extends Downloader
|
||||
}
|
||||
updateObserver();
|
||||
}
|
||||
snark.shutdown();
|
||||
snarkStopper.run();
|
||||
}
|
||||
|
||||
/** Keeps a mapping of resource names to torrent downloaders */
|
||||
protected HashMap<Resource, Snark> _torrentmap =
|
||||
new HashMap<Resource, Snark>();
|
||||
|
||||
/** Keeps a mapping of resource names to torrent stoppers */
|
||||
protected HashMap<Resource, SnarkShutdown> _stoppermap =
|
||||
new HashMap<Resource, SnarkShutdown>();
|
||||
|
||||
/** If we fail, revert to using this HTTP download transport */
|
||||
protected HTTPDownloader _fallback = null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user