blob_availability fix
This commit is contained in:
parent
69ccbda168
commit
ebdb33bd11
2 changed files with 16 additions and 20 deletions
lbrynet
|
@ -938,7 +938,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
reachable_peers = []
|
reachable_peers = []
|
||||||
unreachable_peers = []
|
unreachable_peers = []
|
||||||
try:
|
try:
|
||||||
peers = await d2f(self.jsonrpc_peer_list(blob_hash, search_timeout))
|
peers = await self.jsonrpc_peer_list(blob_hash, search_timeout)
|
||||||
peer_infos = [{"peer": Peer(x['host'], x['port']),
|
peer_infos = [{"peer": Peer(x['host'], x['port']),
|
||||||
"blob_hash": blob_hash,
|
"blob_hash": blob_hash,
|
||||||
"timeout": blob_timeout} for x in peers]
|
"timeout": blob_timeout} for x in peers]
|
||||||
|
@ -946,16 +946,14 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
dl_peers = []
|
dl_peers = []
|
||||||
dl_results = []
|
dl_results = []
|
||||||
for peer_info in peer_infos:
|
for peer_info in peer_infos:
|
||||||
d = downloader.download_temp_blob_from_peer(**peer_info)
|
dl.append(downloader.download_temp_blob_from_peer(**peer_info))
|
||||||
dl.append(d)
|
|
||||||
dl_peers.append("%s:%i" % (peer_info['peer'].host, peer_info['peer'].port))
|
dl_peers.append("%s:%i" % (peer_info['peer'].host, peer_info['peer'].port))
|
||||||
for dl_peer, (success, download_result) in zip(dl_peers, (await d2f(defer.DeferredList(dl)))):
|
for dl_peer, download_result in zip(dl_peers, await asyncio.gather(*dl)):
|
||||||
if success:
|
if download_result:
|
||||||
if download_result:
|
reachable_peers.append(dl_peer)
|
||||||
reachable_peers.append(dl_peer)
|
else:
|
||||||
else:
|
unreachable_peers.append(dl_peer)
|
||||||
unreachable_peers.append(dl_peer)
|
dl_results.append(download_result)
|
||||||
dl_results.append(download_result)
|
|
||||||
is_available = any(dl_results)
|
is_available = any(dl_results)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return {'error': "Failed to get peers for blob: %s" % err}
|
return {'error': "Failed to get peers for blob: %s" % err}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import tempfile
|
||||||
|
|
||||||
from twisted.internet import defer, threads, reactor
|
from twisted.internet import defer, threads, reactor
|
||||||
|
|
||||||
|
from lbrynet.extras.compat import d2f
|
||||||
from lbrynet.blob.blob_file import BlobFile
|
from lbrynet.blob.blob_file import BlobFile
|
||||||
from lbrynet.p2p.BlobManager import DiskBlobManager
|
from lbrynet.p2p.BlobManager import DiskBlobManager
|
||||||
from lbrynet.p2p.RateLimiter import DummyRateLimiter
|
from lbrynet.p2p.RateLimiter import DummyRateLimiter
|
||||||
|
@ -94,16 +95,13 @@ class SinglePeerDownloader:
|
||||||
yield connection_manager.stop()
|
yield connection_manager.stop()
|
||||||
defer.returnValue(result)
|
defer.returnValue(result)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
async def download_temp_blob_from_peer(self, peer, timeout, blob_hash):
|
||||||
def download_temp_blob_from_peer(self, peer, timeout, blob_hash):
|
tmp_storage = SQLiteStorage(':memory:')
|
||||||
tmp_dir = yield threads.deferToThread(tempfile.mkdtemp)
|
await tmp_storage.open()
|
||||||
tmp_storage = SQLiteStorage(tmp_dir)
|
tmp_dir = tempfile.mkdtemp()
|
||||||
yield tmp_storage.setup()
|
|
||||||
tmp_blob_manager = DiskBlobManager(tmp_dir, tmp_storage)
|
tmp_blob_manager = DiskBlobManager(tmp_dir, tmp_storage)
|
||||||
try:
|
try:
|
||||||
result = yield self.download_blob_from_peer(peer, timeout, blob_hash, tmp_blob_manager)
|
return await d2f(self.download_blob_from_peer(peer, timeout, blob_hash, tmp_blob_manager))
|
||||||
finally:
|
finally:
|
||||||
yield tmp_blob_manager.stop()
|
await tmp_storage.close()
|
||||||
yield tmp_storage.stop()
|
shutil.rmtree(tmp_dir)
|
||||||
yield threads.deferToThread(shutil.rmtree, tmp_dir)
|
|
||||||
defer.returnValue(result)
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue