mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 11:16:47 +00:00
A host that is up but does not answer (a hung NFS mount, for one) keeps a libvirt call waiting: libvirt's keepalive does not end it, since the daemon still answers keepalives. Each such request held a whole sync worker, and once they held every worker the panel stopped answering, pages without libvirt too; F5 added another. gunicorn now runs threaded workers, 4 threads each, and a worker takes no more connections than it has threads, so one whose threads are all busy leaves new requests to the others. A threaded worker keeps reporting in while a thread waits, so gunicorn's timeout no longer ends the request: the worker now exits itself when a request runs past the timeout (600 s), and gunicorn starts a new one. Short claims expire on that bound. The address search runs one at a time in a process, as it did with one request per worker. |
||
|---|---|---|
| .. | ||
| tests | ||
| __init__.py | ||
| asgi.py | ||
| common_tags.py | ||
| gunicorn_worker.py | ||
| middleware.py | ||
| serializers.py | ||
| settings-dev.py | ||
| settings.py.template | ||
| test_runner.py | ||
| urls-api.py | ||
| urls.py | ||
| wsgi.py | ||
| wsgi_custom.py | ||