)]}'
{"id":"openstack%2Ftaskflow~996372","triplet_id":"openstack%2Ftaskflow~master~I63b974ca51a5cc3929703d242e11ea47a8ed1f8c","project":"openstack/taskflow","branch":"master","attention_set":{},"removed_from_attention_set":{"290":{"account":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"},"last_update":"2026-07-09 18:45:04.000000000","reason":"Removed by \u003cGERRIT_ACCOUNT_290\u003e by clicking the attention icon","reason_account":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"}}},"hashtags":[],"change_id":"I63b974ca51a5cc3929703d242e11ea47a8ed1f8c","subject":"Do not let a transient job board failure kill the conductor","status":"NEW","created":"2026-07-07 22:04:23.000000000","updated":"2026-07-09 18:45:04.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":"908e3beb204a0090b3a78cf040e3803c65e81b8c","_number":996372,"virtual_id_number":996372,"owner":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-07-08 16:24:29.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-07-07 23:15:23.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":"f0d6184f1c0ee097b6bfdf4b29fcb498e3c74503","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"},"date":"2026-07-07 22:04:23.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"b809831a43fd0fa3d23fa2bd471c90b4be47a20a","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-07 23:15:23.000000000","message":"Patch Set 1: Verified-1\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/b205da38f6ac4bd0946b4869614380c9\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/ade2a9b265874678931a07683d2e9d73 : SUCCESS in 1h 09m 41s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/8c295fcf302a454da37c4581d573c3ec : SUCCESS in 10m 11s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4e08931dc9944e0ea981695e3f3e6af8 : FAILURE in 3m 29s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/9bde82a3e2ce4d03a32c944a8faddbf6 : SUCCESS in 12m 17s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/fa6934b4657d4ca5b5ec2a720f897f04 : SUCCESS in 8m 46s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a7179a5320964d9f9653fa34d8fc0ea9 : SUCCESS in 11m 41s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/f4f67fcef0f64ad2a2a490f858a8a9cc : FAILURE in 11m 35s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c634fe6190e54e4cb87b2f465f81128c : SUCCESS in 5m 05s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/6dcc6e95209149bb9bb01798507040eb : SUCCESS in 3m 47s\n- taskflow-functional-zookeeper https://zuul.opendev.org/t/openstack/build/880a5e8369ff4a0e892a86462f51251c : SUCCESS in 6m 22s\n- taskflow-functional-redis https://zuul.opendev.org/t/openstack/build/4d5c01b092de4c8c95c80f8942b12f2f : SUCCESS in 6m 15s\n- taskflow-functional-etcd https://zuul.opendev.org/t/openstack/build/50923274aeb74141b69c9a3e699469b6 : SUCCESS in 5m 59s","accounts_in_message":[],"_revision_number":1},{"id":"592798be7d9607f95e870ca508dde8b886ee7724","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"},"date":"2026-07-08 15:23:32.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"5293b16b51ab5d002bc1ca59cc1e05cbcfdc28d4","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-08 16:24:29.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/94af76ae8a9a41e1851f924a7ea7a1c6\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/747213b072534cec80cca8ce10af8641 : SUCCESS in 59m 24s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/c0b040bbf462426fa591c3eb16283fe2 : SUCCESS in 8m 26s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/0055bc268aa2440f9fdf8faf0b4e99ac : SUCCESS in 2m 18s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/872cb96740d74263bb87d32f0cc9cc8a : SUCCESS in 9m 10s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/c1d336b17e1646cdaca32b798c95b72b : SUCCESS in 10m 01s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/1077603afb0f480ca8e7441c923e860e : SUCCESS in 12m 08s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/c66a754542234d1b830ad16ae2da762d : FAILURE in 9m 05s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6e9c7078200a4931907884cd98080578 : SUCCESS in 5m 48s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/d72cde99be13486f9e46ff5bdec53686 : SUCCESS in 4m 31s\n- taskflow-functional-zookeeper https://zuul.opendev.org/t/openstack/build/2dafcd4c360249118adc731a2f108c4c : SUCCESS in 7m 22s\n- taskflow-functional-redis https://zuul.opendev.org/t/openstack/build/5577fedffb3a434892780299053b9e27 : SUCCESS in 6m 27s\n- taskflow-functional-etcd https://zuul.opendev.org/t/openstack/build/9565b703dd4d42e8a2e98038ae05cb76 : SUCCESS in 6m 04s","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"7117cb743003c598200daaae226e71e0a7d1c763","revisions":{"83895f8b8d5b0b4cbd17701c1ac155469926c942":{"kind":"REWORK","_number":1,"created":"2026-07-07 22:04:23.000000000","uploader":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"},"ref":"refs/changes/72/996372/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/taskflow","ref":"refs/changes/72/996372/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/taskflow refs/changes/72/996372/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/taskflow refs/changes/72/996372/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/taskflow refs/changes/72/996372/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/taskflow refs/changes/72/996372/1"}}},"commit":{"parents":[{"commit":"ed199a15a8024e944bb627b45a0bb8310f60d24b","subject":"zuul: Use openstack-python3-next-jobs template","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/taskflow/commit/ed199a15a8024e944bb627b45a0bb8310f60d24b"}]}],"author":{"name":"Antony Messerli","email":"antony@mes.ser.li","date":"2026-07-07 20:43:21.000000000","tz":-300},"committer":{"name":"Antony Messerli","email":"antony@mes.ser.li","date":"2026-07-07 21:34:26.000000000","tz":-300},"subject":"Do not let a transient job board failure kill the conductor","message":"Do not let a transient job board failure kill the conductor\n\nExecutorConductor._run_until_dead claims jobs by iterating the job\nboard. The per-job claim() call is wrapped to tolerate UnclaimableJob\nand NotFound, but the iteration itself is not guarded. On the Redis job\nboard a transient backend error (ConnectionError/TimeoutError) is\ntranslated into a JobFailure, which is raised while iterating and\nescapes _run_until_dead and run() (which only handle StopIteration and\nKeyboardInterrupt). Nothing in the conductor handles JobFailure, so a\nsingle transient disruption -- for example a Redis Sentinel master\nfailover, where the previous master\u0027s socket times out -- permanently\nterminates a conductor that is meant to run until stopped.\n\nWrap the job iteration in a handler for JobFailure that logs and backs\noff, letting the conductor continue on the next cycle (where it will\nreconnect to the newly elected master and resume claiming jobs). This\nmirrors the existing tolerance for claim() failures in the same loop and\nalso covers a JobFailure raised from claim() itself.\n\nCloses-Bug: #2160070\nRelated-Bug: #2160072\nChange-Id: I63b974ca51a5cc3929703d242e11ea47a8ed1f8c\nSigned-off-by: Antony Messerli \u003cantony@mes.ser.li\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/taskflow/commit/83895f8b8d5b0b4cbd17701c1ac155469926c942"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/taskflow/commit/83895f8b8d5b0b4cbd17701c1ac155469926c942"}]},"branch":"refs/heads/master"},"7117cb743003c598200daaae226e71e0a7d1c763":{"kind":"REWORK","_number":2,"created":"2026-07-08 15:23:32.000000000","uploader":{"_account_id":290,"name":"Antony Messerli","email":"antony@mes.ser.li","username":"antonym"},"ref":"refs/changes/72/996372/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/taskflow","ref":"refs/changes/72/996372/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/taskflow refs/changes/72/996372/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/taskflow refs/changes/72/996372/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/taskflow refs/changes/72/996372/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/taskflow refs/changes/72/996372/2"}}},"commit":{"parents":[{"commit":"ed199a15a8024e944bb627b45a0bb8310f60d24b","subject":"zuul: Use openstack-python3-next-jobs template","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/taskflow/commit/ed199a15a8024e944bb627b45a0bb8310f60d24b"}]}],"author":{"name":"Antony Messerli","email":"antony@mes.ser.li","date":"2026-07-07 20:43:21.000000000","tz":-300},"committer":{"name":"Antony Messerli","email":"messerli.antony@heb.com","date":"2026-07-08 15:23:08.000000000","tz":-300},"subject":"Do not let a transient job board failure kill the conductor","message":"Do not let a transient job board failure kill the conductor\n\nExecutorConductor._run_until_dead claims jobs by iterating the job\nboard. The per-job claim() call is wrapped to tolerate UnclaimableJob\nand NotFound, but the iteration itself is not guarded. On the Redis job\nboard a transient backend error (ConnectionError/TimeoutError) is\ntranslated into a JobFailure, which is raised while iterating and\nescapes _run_until_dead and run() (which only handle StopIteration and\nKeyboardInterrupt). Nothing in the conductor handles JobFailure, so a\nsingle transient disruption -- for example a Redis Sentinel master\nfailover, where the previous master\u0027s socket times out -- permanently\nterminates a conductor that is meant to run until stopped.\n\nWrap the job iteration in a handler for JobFailure that logs and backs\noff, letting the conductor continue on the next cycle (where it will\nreconnect to the newly elected master and resume claiming jobs). This\nmirrors the existing tolerance for claim() failures in the same loop and\nalso covers a JobFailure raised from claim() itself.\n\nCloses-Bug: #2160070\nRelated-Bug: #2160072\nChange-Id: I63b974ca51a5cc3929703d242e11ea47a8ed1f8c\nSigned-off-by: Antony Messerli \u003cantony@mes.ser.li\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/taskflow/commit/7117cb743003c598200daaae226e71e0a7d1c763"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/taskflow/commit/7117cb743003c598200daaae226e71e0a7d1c763"}]},"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":""}}}]}
