Skip to content

Unable to donwload large backups on 32 bit platforms #4375

@sabeechen

Description

@sabeechen

Describe the issue you are experiencing

Downloading a backup over 2GB on a 32bit platform fails, both form the API and web-ui. The supervisor appears to close the network connection and the supervisor log prints the error:

OverflowError: Python int too large to convert to C ssize_t

This appears to be a regression of this previous issue, based on the symptoms. I suspect its related to the recent update to python 3.11, since the fix for it last time required patches specific to the python version being used.

I've gotten reports from several users on different platforms, the common thread between them seems to be running a 32bit version of HAOS. I'm filing this issue on their behalf and track the issue on my side here. An example of a platform that has been affected is:
Home Assistant Version: 2023.6.0
Supervisor Version: 2023.06.1
Architecture: armv7
Supervisor Channel: stable

What type of installation are you running?

Home Assistant OS

Which operating system are you running on?

Home Assistant Operating System

Steps to reproduce the issue

  1. Install and set up 32 bit HAOS on a device
  2. Copy a 2GB (random bytes) file to the /config folder
  3. Create a backup
  4. Try to download the backup from the "Backups" page.

Anything in the Supervisor logs that might be useful for us?

File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 458, in _handle_request
   reset = await self.finish_response(request, resp, start_time)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 611, in finish_response
   await prepare_meth(request)
 File "/usr/local/lib/python3.11/site-packages/aiohttp/web_fileresponse.py", line 286, in prepare
   return await self._sendfile(request, fobj, offset, count)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/usr/local/lib/python3.11/site-packages/aiohttp/web_fileresponse.py", line 99, in _sendfile
   await loop.sendfile(transport, fobj, offset, count)
 File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1185, in sendfile
   return await self._sendfile_native(transport, file,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 725, in _sendfile_native
   return await self.sock_sendfile(transp._sock, file, offset, count,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/usr/local/lib/python3.11/asyncio/base_events.py", line 881, in sock_sendfile
   return await self._sock_sendfile_native(sock, file,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/usr/local/lib/python3.11/asyncio/unix_events.py", line 373, in _sock_sendfile_native
   return await fut
          ^^^^^^^^^
 File "/usr/local/lib/python3.11/asyncio/unix_events.py", line 395, in _sock_sendfile_native_impl
   sent = os.sendfile(fd, fileno, offset, blocksize)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OverflowError: Python int too large to convert to C ssize_t


### System Health information

I'm reporting this issue on behalf of other users and don't have access to the system health info.

### Supervisor diagnostics

I'm reporting this issue on behalf of other users and don't have access to the supervisor diagnostics.

### Additional information

_No response_

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions