)]}'
{"id":"openstack%2Fswift~1002146","triplet_id":"openstack%2Fswift~feature%2Fthreaded~Iadc83b2840e7c41003be42db6647592d48993883","project":"openstack/swift","branch":"feature/threaded","topic":"eventlet-removal","attention_set":{"6968":{"account":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"last_update":"2026-08-24 17:57:05.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"Iadc83b2840e7c41003be42db6647592d48993883","subject":"gunicorn: one arbiter per port for servers_per_port","status":"NEW","created":"2026-08-24 15:41:34.000000000","updated":"2026-08-28 11:25:45.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":24,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"464ae47b389636d73270c3a2ca418ccfd068949d","_number":1002146,"virtual_id_number":1002146,"owner":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-08-28 11:25:45.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-08-24 17:20:04.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-08-24 17:57:05.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"5ca1efdfe8a068c956ffe3746c59566c3964a009","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2026-08-24 15:41:34.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"9afe946a269304a86f3dbfca1e531c79ce4f23e0","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-24 17:20:04.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/844e89c698c04de780a0d31ceec74832\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/6cbb64af654b405f884585c60a7a2ab4 : SUCCESS in 37m 59s","accounts_in_message":[],"_revision_number":1},{"id":"756af8b3e29b4d102c6c8a27ab0574bfbf711426","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-24 17:57:05.000000000","message":"Patch Set 1: Verified-1\n\n(24 comments)\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/c0d9b8e268a34750a52187b5fec0166c\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/7f40ab3bed464492b017e037591e6d56 : SUCCESS in 9m 41s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/291d7cdd842143169cf428cdac91e745 : SUCCESS in 9m 32s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/9110a3e3aacb4d8485de28d453fa691d : SUCCESS in 18m 01s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/e17a99815c9a47019cf24691c5c195e9 : SUCCESS in 17m 49s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/c84575fd1e684dd98e9f4246a190c196 : SUCCESS in 12m 19s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/18a7900da2cb491c9bbba80c1cb51c86 : SUCCESS in 6m 50s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/17207658049641bb8fdf27d818aa2623 : SUCCESS in 15m 44s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/cb0697cba31045b59d729d9551ec0896 : SUCCESS in 19m 08s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/d35ef897c4d1420b8bd6e9e4a19af056 : TIMED_OUT in 1h 31m 46s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/30267de59e7441b1996d5e806546777e : SUCCESS in 21m 10s\n- swift-tox-py3-no-eventlet https://zuul.opendev.org/t/openstack/build/4447901198eb4fd28ef6243b57c6b9ce : SUCCESS in 18m 29s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/2d4fc001a63742edab16411e1ce8f14f : SUCCESS in 14m 28s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/4362aabb3f1b441abe5d2a21b88717e8 : SUCCESS in 11m 42s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/a4d6efd845034a70a060d5382519f09e : SUCCESS in 11m 33s\n- swift-tox-func-no-eventlet-py312 https://zuul.opendev.org/t/openstack/build/a180c9121e154fc58da7a26c21a5f41c : SUCCESS in 10m 14s\n- swift-tox-func-py39-centos-9-stream https://zuul.opendev.org/t/openstack/build/7641a78745814c45942822259df72496 : SUCCESS in 18m 48s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/8286493b31a94c328219ce345607422f : SUCCESS in 4m 57s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/2373dacaa0244ebc83430528e7c775b6 : FAILURE in 9m 13s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/85a6f0552ec247438ace36f19d91f640 : SUCCESS in 10m 36s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/ea8092ee374f419dbce010bc2ce8f013 : SUCCESS in 56m 01s\n- swift-probetests-no-eventlet-centos-9-stream https://zuul.opendev.org/t/openstack/build/83687ed9816940478510333651c8d5d9 : SUCCESS in 49m 13s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/8e62c7eb1fed40e1a17ad4474feb679c : SUCCESS in 22m 19s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/8e4c388bd866451aa085c8c008e4bf23 : FAILURE in 4m 26s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/3bf36e07261c40dbb5c1f8c55d11c448 : SUCCESS in 12m 54s\n\nWarning:\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.","accounts_in_message":[],"_revision_number":1},{"id":"a83e3960b7d68f1f7ff2452673b6fda8ef2aea24","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2026-08-28 10:23:09.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"1546d33bb9e691de07cd388e3279f9d97d291ec3","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-28 11:12:02.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/875e8d785e23470db077afcf992c5ca9\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/be7d5a0798f4402695db56a2aceace83 : SUCCESS in 37m 32s","accounts_in_message":[],"_revision_number":2},{"id":"464ae47b389636d73270c3a2ca418ccfd068949d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-28 11:25:45.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/210b24f8d8364d8aa0e9a0e7f9e753fd\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6381617d6630442f86977bc6af6c4131 : SUCCESS in 6m 16s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/e52306ffd5f44161ac0d112ac2f1307b : SUCCESS in 5m 40s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/9c52d20206f64bd09a933f7c3b3b0912 : SUCCESS in 12m 55s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/fae08595b7f74f5cbe510aab359f1bb9 : SUCCESS in 12m 40s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/04f4cdc07a304d8da8a0dd67782deb54 : SUCCESS in 11m 55s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/081d9947c14b400084e16c1535b2b8c0 : SUCCESS in 5m 53s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/480dc7d6336948828a4f05791b6396c8 : SUCCESS in 11m 49s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/84ffa528e08e47b38d6c26d63a100eac : SUCCESS in 11m 14s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/f3c6536722ee4909a516f402cc692b14 : SUCCESS in 13m 00s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/aa351ecc4f85449785a4a0e58eb64010 : SUCCESS in 18m 02s\n- swift-tox-py3-no-eventlet https://zuul.opendev.org/t/openstack/build/9ba1362ee07145b78a5b2aaee72f0b80 : SUCCESS in 12m 06s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/f7f823afccbd4a9f9f146e48486a9bec : SUCCESS in 8m 49s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/faaa6e9b317d4456ada6740d14bd6bcd : SUCCESS in 10m 03s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/1ad7723aeafb425f980cca02628b3e88 : SUCCESS in 17m 43s\n- swift-tox-func-no-eventlet-py312 https://zuul.opendev.org/t/openstack/build/836269b774af4affab239316e57d81dd : SUCCESS in 12m 55s\n- swift-tox-func-py39-centos-9-stream https://zuul.opendev.org/t/openstack/build/7f92581ea60145a3898ed6b5798e1699 : SUCCESS in 11m 21s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/d59d700f5ec241619d791442282310e9 : SUCCESS in 7m 37s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/f6f56eba2e3f4aa184f5342c8e1e8732 : FAILURE in 8m 36s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/63b5b36bdb6841df910f51d4877d9c23 : SUCCESS in 9m 14s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/acff6300d75546d692e8ca434ee3514c : SUCCESS in 47m 51s\n- swift-probetests-no-eventlet-centos-9-stream https://zuul.opendev.org/t/openstack/build/5576cda918d94dcf96f03782487c59f3 : SUCCESS in 40m 06s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/eb377babde16422c811567e2afc52ca3 : SUCCESS in 23m 23s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/ed5680986f454eaaaf3659af42e9de29 : SUCCESS in 4m 51s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/06d1dfb04b774bfc8397682d72cbbcb7 : SUCCESS in 16m 40s\n\nWarning:\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"72e4e3a21df6524c9233ce70245679120d376fac","revisions":{"ea8e9169ba127f6af973a416c605ad9ac77317ac":{"kind":"REWORK","_number":1,"created":"2026-08-24 15:41:34.000000000","uploader":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"ref":"refs/changes/46/1002146/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/46/1002146/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/46/1002146/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/46/1002146/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/46/1002146/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/46/1002146/1"}}},"commit":{"parents":[{"commit":"33ca0d7412b6b61ade6ff332d8d177b5a1eac005","subject":"Address remaining review comments on the eventlet-removal series","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/33ca0d7412b6b61ade6ff332d8d177b5a1eac005"}]}],"author":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-08-24 09:41:05.000000000","tz":120},"committer":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-08-24 15:41:05.000000000","tz":120},"subject":"gunicorn: one arbiter per port for servers_per_port","message":"gunicorn: one arbiter per port for servers_per_port\n\nservers_per_port exists so a wedged disk cannot take down a whole object\nserver: eventlet forks servers_per_port processes per port, each bound to\none socket. gunicorn\u0027s arbiter binds every port and hands all of them to\nevery worker, so a stalled disk consumes threads in workers serving every\nother port too.\n\nFork one arbiter per port instead, each binding a single socket with\nservers_per_port workers. Isolation is then a property of the process\ntree rather than of gunicorn\u0027s worker bookkeeping, so nothing in its\nworker lifecycle -- spawn, reload, SIGTTIN/SIGTTOU, worker management --\nneeds patching or can get it wrong.\n\nThe topology follows the servers_per_port setting and is fixed at\nstartup. A node with no local ring ports still runs the supervisor and\nstill reports ready. Turning the mode on or off is rejected by a reload,\nin either direction, since a single arbiter would otherwise end up\nholding every listener; changing it needs a restart.\n\nOn SIGHUP the ring is re-read before anything is forwarded, so a rejected\nchange does not reach the arbiters half-applied. New ports get an\narbiter, departed ones lose theirs, a port that cannot start is retried\nwith backoff, and readiness is withheld until every wanted port is up.\nA worker reports the generation of the config it came up on, so a report\nfrom the previous one cannot satisfy the next. Only a config that built\nis a new generation, and a burst of hangups is one reload, since signals\ndo not queue and a child may see just one of them.\n\nSignals only set a flag and the loop wakes through a pipe, since PEP 475\nretries an interrupted wait or read rather than surfacing EINTR. TERM,\nINT and QUIT stop the whole set; HUP reloads; USR1, TTIN and TTOU are\nforwarded as themselves so they keep their gunicorn meaning at the\nservice pid. Each arbiter reports readiness up a pipe and the supervisor\nnotifies systemd under its own pid, so swift-reload --wait and\nNotifyAccess\u003dmain still see the main process. Arbiters are signalled and\nreaped on every exit path, so none are left holding a listener.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Iadc83b2840e7c41003be42db6647592d48993883\nSigned-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ea8e9169ba127f6af973a416c605ad9ac77317ac"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ea8e9169ba127f6af973a416c605ad9ac77317ac"}]},"branch":"refs/heads/feature/threaded"},"72e4e3a21df6524c9233ce70245679120d376fac":{"kind":"REWORK","_number":2,"created":"2026-08-28 10:23:09.000000000","uploader":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"ref":"refs/changes/46/1002146/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/46/1002146/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/46/1002146/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/46/1002146/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/46/1002146/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/46/1002146/2"}}},"commit":{"parents":[{"commit":"33ca0d7412b6b61ade6ff332d8d177b5a1eac005","subject":"Address remaining review comments on the eventlet-removal series","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/33ca0d7412b6b61ade6ff332d8d177b5a1eac005"}]}],"author":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-08-24 09:41:05.000000000","tz":120},"committer":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-08-28 10:15:14.000000000","tz":120},"subject":"gunicorn: one arbiter per port for servers_per_port","message":"gunicorn: one arbiter per port for servers_per_port\n\nservers_per_port exists so a wedged disk cannot take down a whole object\nserver: eventlet forks servers_per_port processes per port, each bound to\none socket. gunicorn\u0027s arbiter binds every port and hands all of them to\nevery worker, so a stalled disk consumes threads in workers serving every\nother port too.\n\nFork one arbiter per port instead, each binding a single socket with\nservers_per_port workers. Isolation is then a property of the process\ntree rather than of gunicorn\u0027s worker bookkeeping, so nothing in its\nworker lifecycle -- spawn, reload, SIGTTIN/SIGTTOU, worker management --\nneeds patching or can get it wrong.\n\nThe topology follows the servers_per_port setting and is fixed at\nstartup. A node with no local ring ports still runs the supervisor and\nstill reports ready. Turning the mode on or off is rejected by a reload,\nin either direction, since a single arbiter would otherwise end up\nholding every listener; changing it needs a restart.\n\nOn SIGHUP the ring is re-read before anything is forwarded, so a rejected\nchange does not reach the arbiters half-applied. New ports get an\narbiter, departed ones lose theirs, a port that cannot start is retried\nwith backoff, and readiness is withheld until every wanted port is up.\nA worker reports the generation of the config it came up on, so a report\nfrom the previous one cannot satisfy the next. Only a config that built\nis a new generation, and a burst of hangups is one reload, since signals\ndo not queue and a child may see just one of them.\n\nSignals only set a flag and the loop wakes through a pipe, since PEP 475\nretries an interrupted wait or read rather than surfacing EINTR. TERM,\nINT and QUIT stop the whole set; HUP reloads; USR1, TTIN and TTOU are\nforwarded as themselves so they keep their gunicorn meaning at the\nservice pid. Each arbiter reports readiness up a pipe and the supervisor\nnotifies systemd under its own pid, so swift-reload --wait and\nNotifyAccess\u003dmain still see the main process. Arbiters are signalled and\nreaped on every exit path, so none are left holding a listener.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Iadc83b2840e7c41003be42db6647592d48993883\nSigned-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/72e4e3a21df6524c9233ce70245679120d376fac"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/72e4e3a21df6524c9233ce70245679120d376fac"}]},"branch":"refs/heads/feature/threaded"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
