forked from LBRYCommunity/lbry-sdk
fix sendfile exceptions
This commit is contained in:
parent
669f3394c7
commit
569de37e16
2 changed files with 13 additions and 5 deletions
|
@ -163,7 +163,10 @@ class AbstractBlob:
|
||||||
if not self.is_readable():
|
if not self.is_readable():
|
||||||
raise OSError('blob files cannot be read')
|
raise OSError('blob files cannot be read')
|
||||||
with self.reader_context() as handle:
|
with self.reader_context() as handle:
|
||||||
return await self.loop.sendfile(writer.transport, handle, count=self.get_length())
|
try:
|
||||||
|
return await self.loop.sendfile(writer.transport, handle, count=self.get_length())
|
||||||
|
except (ConnectionResetError, BrokenPipeError, RuntimeError, OSError, AttributeError):
|
||||||
|
return -1
|
||||||
|
|
||||||
def decrypt(self, key: bytes, iv: bytes) -> bytes:
|
def decrypt(self, key: bytes, iv: bytes) -> bytes:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -101,16 +101,21 @@ class BlobServerProtocol(asyncio.Protocol):
|
||||||
self.started_transfer.set()
|
self.started_transfer.set()
|
||||||
try:
|
try:
|
||||||
sent = await asyncio.wait_for(blob.sendfile(self), self.transfer_timeout, loop=self.loop)
|
sent = await asyncio.wait_for(blob.sendfile(self), self.transfer_timeout, loop=self.loop)
|
||||||
self.blob_manager.connection_manager.sent_data(self.peer_address_and_port, sent)
|
if sent and sent > 0:
|
||||||
log.info("sent %s (%i bytes) to %s:%i", bh, sent, peer_address, peer_port)
|
self.blob_manager.connection_manager.sent_data(self.peer_address_and_port, sent)
|
||||||
except (ConnectionResetError, BrokenPipeError, RuntimeError, OSError, asyncio.TimeoutError) as err:
|
log.info("sent %s (%i bytes) to %s:%i", bh, sent, peer_address, peer_port)
|
||||||
|
else:
|
||||||
|
log.debug("stopped sending %s to %s:%i", bh, peer_address, peer_port)
|
||||||
|
except (OSError, asyncio.TimeoutError) as err:
|
||||||
if isinstance(err, asyncio.TimeoutError):
|
if isinstance(err, asyncio.TimeoutError):
|
||||||
log.debug("timed out sending blob %s to %s", bh, peer_address)
|
log.debug("timed out sending blob %s to %s", bh, peer_address)
|
||||||
else:
|
else:
|
||||||
log.debug("stopped sending %s to %s:%i", bh, peer_address, peer_port)
|
log.warning("could not read blob %s to send %s:%i", bh, peer_address, peer_port)
|
||||||
self.close()
|
self.close()
|
||||||
finally:
|
finally:
|
||||||
self.transfer_finished.set()
|
self.transfer_finished.set()
|
||||||
|
else:
|
||||||
|
log.info("don't have %s to send %s:%i", blob.blob_hash[:8], peer_address, peer_port)
|
||||||
if responses:
|
if responses:
|
||||||
self.send_response(responses)
|
self.send_response(responses)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue