)]}'
{"id":"openstack%2Foctavia~1005641","triplet_id":"openstack%2Foctavia~master~Ie9ddc643037901c151f84cfcbd9899f458180c76","project":"openstack/octavia","branch":"master","topic":"fix-driver-agent-eof","hashtags":[],"change_id":"Ie9ddc643037901c151f84cfcbd9899f458180c76","subject":"Fix driver-agent loops on client disconnect","status":"NEW","created":"2026-09-15 02:20:14.000000000","updated":"2026-09-15 05:24:42.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"abf3eef1f834777bc51ba2c6492e6de6bc9ad0cf","_number":1005641,"virtual_id_number":1005641,"owner":{"_account_id":39426,"name":"fivetime","display_name":"fivetime","email":"td@fivetime.ltd","username":"fivetime"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-09-15 05:24:42.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},"Backport-Candidate":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do Not Backport","-1":"Not A Backport Candidate"," 0":"Backport Review Needed","+1":"Proposed Backport","+2":"Should Backport"},"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-09-15 05:24:42.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":"19662e8159a2c13048457d1ea715c01a904507d2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39426,"name":"fivetime","display_name":"fivetime","email":"td@fivetime.ltd","username":"fivetime"},"date":"2026-09-15 02:20:14.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"76b213738a0f09c39044e3f5732e5475aef0a104","author":{"_account_id":39426,"name":"fivetime","display_name":"fivetime","email":"td@fivetime.ltd","username":"fivetime"},"date":"2026-09-15 02:21:03.000000000","message":"Patch Set 1:\n\nLocal validation on Python 3.14: all 1654 unit tests passed with zero skips (stestr, master upper constraints), repository-wide flake8 passed, and bandit found no issues in the changed listener. A real Unix socketpair comparison reproduced the upstream receive loop for immediate disconnect, partial size header, missing payload and partial payload; with this patch all four raise ConnectionError promptly, and a complete JSON frame still succeeds. The full tox pep8 job and deployment integration tests were not run locally.","accounts_in_message":[],"_revision_number":1},{"id":"abf3eef1f834777bc51ba2c6492e6de6bc9ad0cf","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-15 05:24:42.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/a8e46261fa03414faaeba81aeeb64224\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/4fe1ee6442b04b8ca2596ea87fb5d9e3 : SUCCESS in 13m 59s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/a5e471639e884b28b7b49ddb72844ed4 : SUCCESS in 6m 15s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/053fb50882d14e0999c6bd7bd8d01563 : SUCCESS in 5m 29s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/ebd53cb9fc024131b26843d8b2626cc3 : SUCCESS in 5m 51s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/6226f68f8c8546239ad729ef56232324 : SUCCESS in 9m 20s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/543ed5613989420bb0bb42b50985020b : SUCCESS in 15m 42s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/2a0672f085904bf2ac4787edb572401e : SUCCESS in 9m 34s\n- octavia-tox-py313-tips https://zuul.opendev.org/t/openstack/build/192ea2bf865b4cf79b088738d39f5aa4 : SUCCESS in 4m 58s\n- octavia-tox-functional-py313-tips https://zuul.opendev.org/t/openstack/build/be71ce3dbe854b3dad2e3ab0ac6f467a : SUCCESS in 3m 52s\n- openstack-tox-pip-check-reqs https://zuul.opendev.org/t/openstack/build/a8ce70edeafc4b9f867c9848cf9c28d1 : SUCCESS in 3m 29s\n- openstack-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/e1792f87ca40495cb0ed7cb49b3d81ba : SUCCESS in 3m 46s\n- octavia-v2-dsvm-noop-api https://zuul.opendev.org/t/openstack/build/1500af58e15746879d763f6769b8ec82 : SUCCESS in 1h 17m 10s\n- octavia-v2-dsvm-scenario-traffic-ops https://zuul.opendev.org/t/openstack/build/a72cb0e6c93e40c896756433300c2a46 : SUCCESS in 1h 33m 55s\n- octavia-v2-dsvm-scenario-non-traffic-ops https://zuul.opendev.org/t/openstack/build/cd4610df410e4d7eb6497d4c19523f69 : SUCCESS in 1h 34m 37s\n- octavia-v2-dsvm-scenario-traffic-ops-jobboard https://zuul.opendev.org/t/openstack/build/7cc40b22f0d04a71a94762b07a5d6460 : SUCCESS in 1h 34m 41s\n- octavia-v2-dsvm-scenario-non-traffic-ops-jobboard https://zuul.opendev.org/t/openstack/build/34c6c3b4ed3f417da392fdda2a408c7f : SUCCESS in 1h 20m 26s\n- octavia-v2-dsvm-tls-barbican https://zuul.opendev.org/t/openstack/build/114ee4de4eb04ff9989e8885a572da03 : SUCCESS in 47m 05s\n- octavia-grenade https://zuul.opendev.org/t/openstack/build/52833c42f4cb42359e0c84938c92231f : SUCCESS in 44m 58s\n- octavia-v2-act-stdby-dsvm-scenario https://zuul.opendev.org/t/openstack/build/8bee1c1b448d4328ab0e0e660ad42c26 : SUCCESS in 46m 53s (non-voting)\n- octavia-v2-dsvm-cinder-amphora https://zuul.opendev.org/t/openstack/build/a7e687b736254f339b34ed9e61bd9212 : SUCCESS in 39m 18s (non-voting)\n- octavia-v2-dsvm-scenario-two-node https://zuul.opendev.org/t/openstack/build/72e45186329e43e7b7cbfbfe7c855fa7 : SUCCESS in 2h 22m 37s (non-voting)\n- octavia-v2-dsvm-scenario-ipv6-only https://zuul.opendev.org/t/openstack/build/67c9207e5a544249a53a4edd3406e0b1 : SUCCESS in 1h 25m 54s (non-voting)\n- octavia-v2-dsvm-scenario-centos-10-stream-traffic-ops https://zuul.opendev.org/t/openstack/build/604344b6153240b79b09630469c9ca07 : SUCCESS in 1h 19m 23s (non-voting)\n- octavia-v2-dsvm-scenario-centos-10-stream-non-traffic-ops https://zuul.opendev.org/t/openstack/build/654b5fa3be644faeb6ef42fadf77a75e : SUCCESS in 1h 02m 32s (non-voting)","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"426e37c65adfc4fba15c8297a2551f3af4a6673f","revisions":{"426e37c65adfc4fba15c8297a2551f3af4a6673f":{"kind":"REWORK","_number":1,"created":"2026-09-15 02:20:14.000000000","uploader":{"_account_id":39426,"name":"fivetime","display_name":"fivetime","email":"td@fivetime.ltd","username":"fivetime"},"ref":"refs/changes/41/1005641/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/octavia","ref":"refs/changes/41/1005641/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/octavia refs/changes/41/1005641/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/octavia refs/changes/41/1005641/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/octavia refs/changes/41/1005641/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/octavia refs/changes/41/1005641/1"}}},"commit":{"parents":[{"commit":"93689cb7701da65b5aad387bb824c477c64b0f2b","subject":"Merge \"Remove legacy Upstart configuration\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/octavia/commit/93689cb7701da65b5aad387bb824c477c64b0f2b"}]}],"author":{"name":"Simon Zhou","email":"td@fivetime.ltd","date":"2026-09-15 02:19:58.000000000","tz":0},"committer":{"name":"Simon Zhou","email":"td@fivetime.ltd","date":"2026-09-15 02:19:58.000000000","tz":0},"subject":"Fix driver-agent loops on client disconnect","message":"Fix driver-agent loops on client disconnect\n\nThe driver-agent reads a newline-terminated message size followed by a\nJSON payload. If a client disconnects before completing either part,\nrecv() returns empty bytes or recv_into() returns zero. Neither raises\nan exception, so the handler loops indefinitely without making progress.\nEach affected connection consumes CPU and occupies a child process.\n\nReject EOF at both stages with ConnectionError. The existing exception\nhandlers in the status, statistics and get listeners then return without\nprocessing an incomplete request. Check the first size byte as well so\nan immediately disconnected peer is rejected without another read.\n\nAdd regression tests for disconnects before and during the size header,\nbefore and during the payload, and successful fragmented payload reads.\nDocument the fix in a release note.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Ie9ddc643037901c151f84cfcbd9899f458180c76\nSigned-off-by: Simon Zhou \u003ctd@fivetime.ltd\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/octavia/commit/426e37c65adfc4fba15c8297a2551f3af4a6673f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/octavia/commit/426e37c65adfc4fba15c8297a2551f3af4a6673f"}]},"branch":"refs/heads/master"}},"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"},{"label":"Backport-Candidate","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":"Backport-Candidate","description":"Backport candidate status","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"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":""}}}]}
