mirror of
https://github.com/LBRYFoundation/lbry-sdk.git
synced 2025-09-13 22:19:49 +00:00
bypass parser during download
This commit is contained in:
parent
a616582733
commit
5586a226c2
1 changed files with 23 additions and 17 deletions
|
@ -32,6 +32,8 @@ class BlobExchangeClientProtocol(asyncio.Protocol):
|
||||||
if self._response_fut and not self._response_fut.done():
|
if self._response_fut and not self._response_fut.done():
|
||||||
self._response_fut.cancel()
|
self._response_fut.cancel()
|
||||||
return
|
return
|
||||||
|
if self._blob_bytes_received and not self.writer.closed():
|
||||||
|
return self._write(data)
|
||||||
|
|
||||||
response = BlobResponse.deserialize(data)
|
response = BlobResponse.deserialize(data)
|
||||||
|
|
||||||
|
@ -51,23 +53,27 @@ class BlobExchangeClientProtocol(asyncio.Protocol):
|
||||||
if response.blob_data and self.writer and not self.writer.closed():
|
if response.blob_data and self.writer and not self.writer.closed():
|
||||||
log.debug("got %i blob bytes from %s:%i", len(response.blob_data), self.peer_address, self.peer_port)
|
log.debug("got %i blob bytes from %s:%i", len(response.blob_data), self.peer_address, self.peer_port)
|
||||||
# write blob bytes if we're writing a blob and have blob bytes to write
|
# write blob bytes if we're writing a blob and have blob bytes to write
|
||||||
if len(response.blob_data) > (self.blob.get_length() - self._blob_bytes_received):
|
self._write(response.blob_data)
|
||||||
data = response.blob_data[:(self.blob.get_length() - self._blob_bytes_received)]
|
|
||||||
log.warning("got more than asked from %s:%d, probable sendfile bug", self.peer_address, self.peer_port)
|
|
||||||
else:
|
def _write(self, data):
|
||||||
data = response.blob_data
|
if len(data) > (self.blob.get_length() - self._blob_bytes_received):
|
||||||
self._blob_bytes_received += len(data)
|
data = data[:(self.blob.get_length() - self._blob_bytes_received)]
|
||||||
try:
|
log.warning("got more than asked from %s:%d, probable sendfile bug", self.peer_address, self.peer_port)
|
||||||
self.writer.write(data)
|
else:
|
||||||
return
|
data = data
|
||||||
except IOError as err:
|
self._blob_bytes_received += len(data)
|
||||||
log.error("error downloading blob from %s:%i: %s", self.peer_address, self.peer_port, err)
|
try:
|
||||||
if self._response_fut and not self._response_fut.done():
|
self.writer.write(data)
|
||||||
self._response_fut.set_exception(err)
|
return
|
||||||
except (asyncio.CancelledError, asyncio.TimeoutError) as err: # TODO: is this needed?
|
except IOError as err:
|
||||||
log.error("%s downloading blob from %s:%i", str(err), self.peer_address, self.peer_port)
|
log.error("error downloading blob from %s:%i: %s", self.peer_address, self.peer_port, err)
|
||||||
if self._response_fut and not self._response_fut.done():
|
if self._response_fut and not self._response_fut.done():
|
||||||
self._response_fut.set_exception(err)
|
self._response_fut.set_exception(err)
|
||||||
|
except (asyncio.CancelledError, asyncio.TimeoutError) as err: # TODO: is this needed?
|
||||||
|
log.error("%s downloading blob from %s:%i", str(err), self.peer_address, self.peer_port)
|
||||||
|
if self._response_fut and not self._response_fut.done():
|
||||||
|
self._response_fut.set_exception(err)
|
||||||
|
|
||||||
async def _download_blob(self) -> typing.Tuple[bool, bool]:
|
async def _download_blob(self) -> typing.Tuple[bool, bool]:
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue