Skip to content

[Bug]: Extraction stops after 30 seconds #69

Closed

Description

@jkalayan

Bug Report

When extracting metadata from a large file, the extraction process times out after 30 seconds. Fails in production and via a local build of the container image


To Reproduce

Press the "extract metadata from files" button on the webform after files are uploaded.

CLI command used

docker pull ghcr.io/ccpbiosim/biosimdb-interface:2026-09-17-interface-1.0.0-schema-1.0.0-extractor-0.0.16
docker run -p 5002:5002 --env-file biosimdb_interface/.env ghcr.io/ccpbiosim/biosimdb-interface:2026-09-17-interface-1.0.0-schema-1.0.0-extractor-0.0.16

Actual output

[2026-10-08 09:53:55 +0000] [8] [INFO] Worker exiting (pid: 8)
[2026-10-08 09:53:56 +0000] [32] [INFO] Booting worker with pid: 32
[2026-10-08 09:53:56 +0000] [7] [INFO] Control socket listening at /home/biosim/.gunicorn/gunicorn.ctl
[2026-10-08 09:54:28 +0000] [7] [CRITICAL] WORKER TIMEOUT (pid:32)
[2026-10-08 09:54:28 +0000] [32] [ERROR] Error handling request POST /biosimdb/extract_metadata
Traceback (most recent call last):
  File "/venv/lib/python3.12/site-packages/gunicorn/workers/sync.py", line 141, in handle
    self.handle_request(listener, req, client, addr)
  File "/venv/lib/python3.12/site-packages/gunicorn/workers/sync.py", line 184, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/flask/app.py", line 1536, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/biosimdb_interface/form/extract.py", line 70, in extract_metadata
    workflow_id = request.form.get("workflow_id")
                  ^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/werkzeug/utils.py", line 100, in __get__
    value = self.fget(obj)  # type: ignore
            ^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/werkzeug/wrappers/request.py", line 445, in form
    self._load_form_data()
  File "/venv/lib/python3.12/site-packages/flask/wrappers.py", line 198, in _load_form_data
    super()._load_form_data()
  File "/venv/lib/python3.12/site-packages/werkzeug/wrappers/request.py", line 271, in _load_form_data
    data = parser.parse(
           ^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/werkzeug/formparser.py", line 242, in parse
    return parse_func(stream, mimetype, content_length, options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/werkzeug/formparser.py", line 267, in _parse_multipart
    form, files = parser.parse(stream, boundary, content_length)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/werkzeug/formparser.py", line 368, in parse
    for data in _chunk_iter(stream.read, self.buffer_size):
  File "/venv/lib/python3.12/site-packages/werkzeug/formparser.py", line 423, in _chunk_iter
    data = read(size)
           ^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/gunicorn/http/body.py", line 227, in read
    data = self.reader.read(1024)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/gunicorn/http/body.py", line 137, in read
    data = self.unreader.read()
           ^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/gunicorn/http/unreader.py", line 44, in read
    ret = self.buf.getvalue()
          ^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/gunicorn/workers/base.py", line 199, in handle_abort
    sys.exit(1)
SystemExit: 1

Expected output

Metadata extraction completes with form fields filled in with extracted metadata


Environment and Versions

  • Operating System: Mac OSX
  • biosimdb-interface Version: 1.0.0
  • Python Version: python3.12
  • Package list:
    • "Flask==3.1.3",
    • "Werkzeug==3.1.9",
    • "data-collections-api==0.1.0",
    • "MDAnalysis==2.10.0",
    • "python-dotenv==1.2.4",
    • "gunicorn>=26,<27",
    • "biosim-extractor>=1.0.1,<2.0"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions