Merge pull request #160 from lbryio/allow-retry-after-timeout

Allow download attempts after having timed out and lower the name cache time
This commit is contained in:
Jack Robison 2016-09-13 15:17:13 -04:00 committed by GitHub
commit 94195b7018
6 changed files with 32 additions and 14 deletions

View file

@ -1,5 +1,5 @@
[bumpversion] [bumpversion]
current_version = 0.4.4 current_version = 0.4.5
commit = True commit = True
tag = True tag = True

View file

@ -1,2 +1,2 @@
__version__ = "0.4.4" __version__ = "0.4.5"
version = tuple(__version__.split('.')) version = tuple(__version__.split('.'))

View file

@ -61,7 +61,7 @@ DEFAULT_MAX_SEARCH_RESULTS = 25
DEFAULT_MAX_KEY_FEE = {'USD': {'amount': 25.0, 'address': ''}} DEFAULT_MAX_KEY_FEE = {'USD': {'amount': 25.0, 'address': ''}}
DEFAULT_SEARCH_TIMEOUT = 3.0 DEFAULT_SEARCH_TIMEOUT = 3.0
DEFAULT_SD_DOWNLOAD_TIMEOUT = 3 DEFAULT_SD_DOWNLOAD_TIMEOUT = 3
DEFAULT_CACHE_TIME = 3600 DEFAULT_CACHE_TIME = 150
DEFAULT_UI_BRANCH = "master" DEFAULT_UI_BRANCH = "master"
SOURCE_TYPES = ['lbry_sd_hash', 'url', 'btih'] SOURCE_TYPES = ['lbry_sd_hash', 'url', 'btih']

View file

@ -264,6 +264,9 @@ class LBRYDaemon(jsonrpc.JSONRPC):
log.info("First run after update") log.info("First run after update")
log.info("lbrynet %s --> %s" % (self.session_settings['last_version']['lbrynet'], self.default_settings['last_version']['lbrynet'])) log.info("lbrynet %s --> %s" % (self.session_settings['last_version']['lbrynet'], self.default_settings['last_version']['lbrynet']))
log.info("lbryum %s --> %s" % (self.session_settings['last_version']['lbryum'], self.default_settings['last_version']['lbryum'])) log.info("lbryum %s --> %s" % (self.session_settings['last_version']['lbryum'], self.default_settings['last_version']['lbryum']))
if "0.4.5" == self.default_settings['last_version']['lbrynet']:
log.info("Lowering name cache time")
self.session_settings['cache_time'] = DEFAULT_CACHE_TIME
f = open(self.daemon_conf, "w") f = open(self.daemon_conf, "w")
f.write(json.dumps(self.session_settings)) f.write(json.dumps(self.session_settings))
@ -920,6 +923,7 @@ class LBRYDaemon(jsonrpc.JSONRPC):
self.session_settings['cache_time'] = int(settings['cache_time']) self.session_settings['cache_time'] = int(settings['cache_time'])
else: else:
return defer.fail() return defer.fail()
self.run_on_startup = self.session_settings['run_on_startup'] self.run_on_startup = self.session_settings['run_on_startup']
self.data_rate = self.session_settings['data_rate'] self.data_rate = self.session_settings['data_rate']
self.max_key_fee = self.session_settings['max_key_fee'] self.max_key_fee = self.session_settings['max_key_fee']
@ -1801,7 +1805,7 @@ class LBRYDaemon(jsonrpc.JSONRPC):
file_name=params.file_name, file_name=params.file_name,
wait_for_write=params.wait_for_write) wait_for_write=params.wait_for_write)
# TODO: downloading can timeout. Not sure what to do when that happens # TODO: downloading can timeout. Not sure what to do when that happens
d.addCallback(get_output_callback(params)) d.addCallbacks(get_output_callback(params), lambda err: str(err))
d.addCallback(lambda message: self._render_response(message, OK_CODE)) d.addCallback(lambda message: self._render_response(message, OK_CODE))
return d return d
@ -2588,7 +2592,6 @@ def get_darwin_lbrycrdd_path():
return default return default
class _DownloadNameHelper(object): class _DownloadNameHelper(object):
def __init__(self, daemon, name, timeout=DEFAULT_TIMEOUT, download_directory=None, def __init__(self, daemon, name, timeout=DEFAULT_TIMEOUT, download_directory=None,
file_name=None, wait_for_write=True): file_name=None, wait_for_write=True):
@ -2629,15 +2632,26 @@ class _DownloadNameHelper(object):
d = self.daemon.add_stream( d = self.daemon.add_stream(
self.name, self.timeout, self.download_directory, self.file_name, stream_info) self.name, self.timeout, self.download_directory, self.file_name, stream_info)
def _raiseErrorOnTimeout(args): def _handle_timeout(args):
was_successful, _, _ = args was_successful, _, _ = args
if not was_successful: if not was_successful:
raise Exception('What am I supposed to do with a timed-out downloader?') log.warning("lbry://%s timed out, removing from streams", self.name)
d.addCallback(_raiseErrorOnTimeout) del self.daemon.streams[self.name]
d.addCallback(_handle_timeout)
if self.wait_for_write: if self.wait_for_write:
d.addCallback(lambda _: self._wait_for_write()) d.addCallback(lambda _: self._wait_for_write())
d.addCallback(lambda _: self.daemon.streams[self.name].downloader)
def _get_stream_for_return():
stream = self.daemon.streams.get(self.name, None)
if stream:
return stream.downloader
else:
self._remove_from_wait("Timed out")
return defer.fail(Exception("Timed out"))
d.addCallback(lambda _: _get_stream_for_return())
return d return d
def _wait_for_write(self): def _wait_for_write(self):
@ -2647,7 +2661,11 @@ class _DownloadNameHelper(object):
return d return d
def has_downloader_wrote(self): def has_downloader_wrote(self):
downloader = self.daemon.streams[self.name].downloader stream = self.daemon.streams.get(self.name, False)
if stream:
downloader = stream.downloader
else:
downloader = False
if not downloader: if not downloader:
return False return False
return self.get_written_bytes(downloader.file_name) return self.get_written_bytes(downloader.file_name)
@ -2682,7 +2700,8 @@ class _DownloadNameHelper(object):
return f return f
def _remove_from_wait(self, r): def _remove_from_wait(self, r):
del self.daemon.waiting_on[self.name] if self.name in self.daemon.waiting_on:
del self.daemon.waiting_on[self.name]
return r return r

View file

@ -95,8 +95,7 @@ class GetStream(object):
def start(self, stream_info, name): def start(self, stream_info, name):
def _cause_timeout(err): def _cause_timeout(err):
log.error(err) log.info('Cancelling download')
log.debug('Forcing a timeout')
self.timeout_counter = self.timeout * 2 self.timeout_counter = self.timeout * 2
def _set_status(x, status): def _set_status(x, status):

View file

@ -1,5 +1,5 @@
[Desktop Entry] [Desktop Entry]
Version=0.4.4 Version=0.4.5
Name=LBRY Name=LBRY
Comment=The world's first user-owned content marketplace Comment=The world's first user-owned content marketplace
Icon=lbry Icon=lbry