Catch out of /tmp space errors in server

This commit is contained in:
deeplow 2023-10-04 11:56:49 +01:00
parent c4fdebc80d
commit 42810e0b94
No known key found for this signature in database
GPG key ID: 577982871529A52A
3 changed files with 37 additions and 9 deletions

View file

@ -33,16 +33,25 @@ class DocumentToPixels(DangerzoneConverter):
pass pass
async def write_page_width(self, width: int, filename: str) -> None: async def write_page_width(self, width: int, filename: str) -> None:
with open(filename, "w") as f: try:
f.write(str(width)) with open(filename, "w") as f:
f.write(str(width))
except OSError:
raise errors.ServerOutOfTempSpaceError()
async def write_page_height(self, height: int, filename: str) -> None: async def write_page_height(self, height: int, filename: str) -> None:
with open(filename, "w") as f: try:
f.write(str(height)) with open(filename, "w") as f:
f.write(str(height))
except OSError:
raise errors.ServerOutOfTempSpaceError()
async def write_page_data(self, data: bytes, filename: str) -> None: async def write_page_data(self, data: bytes, filename: str) -> None:
with open(filename, "wb") as f: try:
f.write(data) with open(filename, "wb") as f:
f.write(data)
except OSError:
raise errors.ServerOutOfTempSpaceError()
async def convert(self) -> None: async def convert(self) -> None:
conversions: Dict[str, Dict[str, Optional[str]]] = { conversions: Dict[str, Dict[str, Optional[str]]] = {
@ -410,13 +419,18 @@ async def main() -> int:
error_code = 0 # Success! error_code = 0 # Success!
except errors.ConversionException as e: # Expected Errors except errors.ConversionException as e: # Expected Errors
error_code = e.error_code error_code = e.error_code
except OSError:
raise errors.ServerOutOfTempSpaceError()
except Exception as e: except Exception as e:
converter.update_progress(str(e), error=True) converter.update_progress(str(e), error=True)
error_code = errors.UnexpectedConversionError.error_code error_code = errors.UnexpectedConversionError.error_code
if not running_on_qubes(): if not running_on_qubes():
# Write debug information (containers version) try:
with open("/tmp/dangerzone/captured_output.txt", "wb") as container_log: # Write debug information (containers version)
container_log.write(converter.captured_output) with open("/tmp/dangerzone/captured_output.txt", "wb") as container_log:
container_log.write(converter.captured_output)
except OSError:
error_code = errors.ServerOutOfTempSpaceError.error_code
return error_code return error_code

View file

@ -95,6 +95,9 @@ async def main() -> None:
except errors.ConversionException as e: except errors.ConversionException as e:
await write_bytes(str(e).encode(), file=sys.stderr) await write_bytes(str(e).encode(), file=sys.stderr)
sys.exit(e.error_code) sys.exit(e.error_code)
except OSError:
error_code = errors.ServerOutOfTempSpaceError.error_code
sys.exit(error_code)
except Exception as e: except Exception as e:
await write_bytes(str(e).encode(), file=sys.stderr) await write_bytes(str(e).encode(), file=sys.stderr)
error_code = errors.UnexpectedConversionError.error_code error_code = errors.UnexpectedConversionError.error_code

View file

@ -113,6 +113,17 @@ class InterruptedConversion(ConversionException):
) )
class OutOfSpaceError(ConversionException):
error_code = ERROR_SHIFT + 70
class ServerOutOfTempSpaceError(OutOfSpaceError):
"""The server ran out of space"""
error_code = ERROR_SHIFT + 71
error_message = "The isolated environment where the document conversion take space ran out of space"
class UnexpectedConversionError(PDFtoPPMException): class UnexpectedConversionError(PDFtoPPMException):
error_code = ERROR_SHIFT + 100 error_code = ERROR_SHIFT + 100
error_message = "Some unexpected error occurred while converting the document" error_message = "Some unexpected error occurred while converting the document"