No disk space left after big zip file into /opt/indico/tmp

Hi Community, This weekend i’ved got a lot of logger emails. I’ve investigate the directories and finaly found a few big zip files (/opt/indico/tmp). What does this exactly mean? (someone upload a big attachment or something?) but after i removed the zip files, i ran into trouble to restart the whole machine. It hangs and i need to shutdown the machine. I am afraid that i need to recover data, the weird thing is that everything in indico is working. Any tips or solutions ? Thanks in advance

The first email contains: 
2024-10-27 14:19:04,658  0000000000000000  -       celery.app.trace - ERROR trace.py:267 -- Task indico.modules.attachments.tasks.generate_materials_package[27968b13-4667-43ce-9196-9347abada7d5] raised unexpected: OSError(28, 'No space left on device')

Traceback (most recent call last):
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1860, in write
    shutil.copyfileobj(src, dest, 1024*8)
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/shutil.py", line 204, in copyfileobj
    fdst_write(buf)
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1216, in write
    self._fileobj.write(data)
OSError: [Errno 28] No space left on device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/indico/.venv/lib/python3.12/site-packages/indico/modules/events/util.py", line 720, in _generate_zip_file
    zip_handler.write(filepath, name)
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1859, in write
    with open(filename, "rb") as src, self.open(zinfo, 'w') as dest:
                                      ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1254, in close
    self._fileobj.seek(self._zinfo.header_offset)
OSError: [Errno 28] No space left on device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1957, in close
    self.fp.seek(self.start_dir)
OSError: [Errno 28] No space left on device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/indico/.venv/lib/python3.12/site-packages/celery/app/trace.py", line 453, in trace_task
    R = retval = fun(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.venv/lib/python3.12/site-packages/sentry_sdk/integrations/celery.py", line 325, in _inner
    reraise(*exc_info)
  File "/opt/indico/.venv/lib/python3.12/site-packages/sentry_sdk/_compat.py", line 127, in reraise
    raise value
  File "/opt/indico/.venv/lib/python3.12/site-packages/sentry_sdk/integrations/celery.py", line 320, in _inner
    return f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.venv/lib/python3.12/site-packages/indico/core/celery/core.py", line 139, in __call__
    rv = super().__call__(*args, **kwargs)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.venv/lib/python3.12/site-packages/celery/app/trace.py", line 736, in __protected_call__
    return self.run(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.venv/lib/python3.12/site-packages/indico/modules/attachments/tasks.py", line 22, in generate_materials_package
    generated_zip = attachment_package_mixin._generate_zip_file(attachments, return_file=True)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.venv/lib/python3.12/site-packages/indico/modules/events/util.py", line 711, in _generate_zip_file
    with ZipFile(temp_file.name, 'w', allowZip64=True) as zip_handler:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1392, in __exit__
    self.close()
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 1962, in close
    self._fpclose(fp)
  File "/opt/indico/.pyenv/versions/3.12.6/lib/python3.12/zipfile/__init__.py", line 2062, in _fpclose
    fp.close()
OSError: [Errno 28] No space left on device

rm /opt/indico/tmp/* should be all that’s needed. And most likely the disk space got indeed exhausted by material packages which can be a bit of a problem especially in bigger events (we’re looking into some options to avoid this such as generating the ZIP file client-side, but that will be something for a later release).

You could also use file system quotes to limit the space /opt/indico/tmp can consume, in order to not affect anything else if it gets full.

1 Like