)]}'
{"id":"openstack%2Fplacement~995235","triplet_id":"openstack%2Fplacement~master~Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f","project":"openstack/placement","branch":"master","attention_set":{},"removed_from_attention_set":{"15334":{"account":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"last_update":"2026-07-01 03:09:19.000000000","reason":"Change was abandoned"}},"hashtags":["asgi","asgi-phase-1","asgi-phase-2"],"change_id":"Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f","subject":"Add native ASGI application for Placement API","status":"ABANDONED","created":"2026-06-29 00:29:13.000000000","updated":"2026-07-01 03:09:19.000000000","total_comment_count":0,"unresolved_comment_count":0,"work_in_progress":true,"has_review_started":true,"meta_rev_id":"f26136e7b73084f2643f53a73c8356f32995e2d1","_number":995235,"virtual_id_number":995235,"owner":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-06-29 21:54:24.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":-2,"max":2},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"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":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"_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},"Review-Priority":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":2},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{"REVIEWER":[{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"reviewer_updates":[{"updated":"2026-06-29 01:36:54.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"},{"updated":"2026-06-29 13:40:03.000000000","updated_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"reviewer":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"state":"REVIEWER"}],"messages":[{"id":"351c766c73c610e21d063e962fb2390790cfe008","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 00:29:13.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"edf3312e3ea7e2bda4e52738715a8cd8e3fb2ea3","tag":"autogenerated:gerrit:setWorkInProgress","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 00:29:22.000000000","message":"Set Work In Progress","accounts_in_message":[],"_revision_number":1},{"id":"3751f284e325df1859281974c83918ab7b10a8b3","tag":"autogenerated:gerrit:setHashtag","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 00:29:22.000000000","message":"Hashtags added: asgi, asgi-phase-1","accounts_in_message":[],"_revision_number":1},{"id":"7e7854037eb320f9fc461893487c6e17bc33c1eb","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 01:36:54.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/10e97859bcae46929f845352ba9de8fe\n\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/45fc368cd4fa4dd8b8ee2fe60a428fd3 : SUCCESS in 58m 12s","accounts_in_message":[],"_revision_number":1},{"id":"34016f152a725807024d92d86929aaf5413c5f54","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:32:59.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"696f8651049152acb371f6c40f0c748e58d69df7","tag":"autogenerated:gerrit:setHashtag","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:34:02.000000000","message":"Hashtag added: asgi-phase-2","accounts_in_message":[],"_revision_number":2},{"id":"aa2cf0663cf886e3a18e4e2d51df923d12816a8a","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 07:34:55.000000000","message":"Patch Set 2: Verified-1\n\nMerge Failed.\n\nThis change or one of its cross-repo dependencies was unable to be automatically merged with the current state of its repository. Please rebase the change and upload a new patchset.\nWarning:\n  Error merging gerrit/openstack/requirements for 995246,2","accounts_in_message":[],"_revision_number":2},{"id":"bcc4d62fa221637dd684b39a56262d46b582ce2e","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:35:49.000000000","message":"Patch Set 2:\n\nrecheck","accounts_in_message":[],"_revision_number":2},{"id":"896489f81b55cb2ac401a74241ba19ab1c191f4c","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 07:38:35.000000000","message":"Patch Set 2:\n\nMerge Failed.\n\nThis change or one of its cross-repo dependencies was unable to be automatically merged with the current state of its repository. Please rebase the change and upload a new patchset.\nWarning:\n  Error merging gerrit/openstack/requirements for 995246,2","accounts_in_message":[],"_revision_number":2},{"id":"b4770d8f56f1a632797c4331c3dc1aa71578dc3a","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:46:49.000000000","message":"Patch Set 2:\n\nrecheck","accounts_in_message":[],"_revision_number":2},{"id":"4a908cd870021d948802407c81bab0a9c49eb9f4","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:46:56.000000000","message":"Patch Set 2:\n\nrecheck","accounts_in_message":[],"_revision_number":2},{"id":"0890e8362abfecad5e11b3ed79226a9be953fcb8","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:48:11.000000000","message":"Uploaded patch set 3: Commit message was updated.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"513819f7d0161abaa2ee8c1485ddfacd3f73b294","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 07:48:28.000000000","message":"Patch Set 2: Verified-1\n\nMerge Failed.\n\nThis change or one of its cross-repo dependencies was unable to be automatically merged with the current state of its repository. Please rebase the change and upload a new patchset.\nWarning:\n  Error merging gerrit/openstack/requirements for 995246,2","accounts_in_message":[],"_revision_number":2},{"id":"bf1d3b2e1a4882d94e29ea29eb70da2ccef68756","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 07:52:31.000000000","message":"Patch Set 3:\n\nrecheck","accounts_in_message":[],"_revision_number":3},{"id":"36d6a855b6bc73ef9a5452b19b290278f81b74b8","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 08:45:01.000000000","message":"Patch Set 3: 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/dd330b6683f6469d9cfb500be49346ef\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/d830d0eec4ef4011bd3778e7aad15c0e : SUCCESS in 4m 24s\n- requirements-check https://zuul.opendev.org/t/openstack/build/0da18f330fdc47778ee658fd477fb57f : FAILURE in 3m 45s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/8a2abf23ff07444ba8d4c10fc438020b : FAILURE in 47m 18s","accounts_in_message":[],"_revision_number":3},{"id":"f660dcc0e400cd87fa66fa85552c5987f6040b99","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 08:57:03.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"73c5d0e4e1790e4899ca154cffdcd8bffe628e66","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 09:36:51.000000000","message":"Patch Set 4: 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/7d7d42bdd1f54efda0a97bea7f5447c7\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/dc2f574281fb40379a314ea7827a4bc0 : SUCCESS in 4m 47s\n- requirements-check https://zuul.opendev.org/t/openstack/build/7b10df8c86884ae58aafa1b249bd9777 : FAILURE in 4m 04s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/e4031047c9ce4f4cbdc867c24bb908d7 : FAILURE in 24m 48s","accounts_in_message":[],"_revision_number":4},{"id":"2132418ddc83f8d333d7dc32ab51061b32e6800f","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 09:48:49.000000000","message":"Uploaded patch set 5.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":5},{"id":"ba0c6797c7eac4e38e3aaf80b4ec4332c296fd58","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 09:51:28.000000000","message":"Patch Set 5:\n\nrecheck","accounts_in_message":[],"_revision_number":5},{"id":"6e39013fb825d5ee18a041f3e6bf02ee16ca9ccc","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 10:05:48.000000000","message":"Patch Set 5: 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/8498c58243344cdc8300ddb9d31d62dd\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/87765b4dc7bf4156bbb475475d5e9642 : SUCCESS in 3m 13s\n- requirements-check https://zuul.opendev.org/t/openstack/build/19d36ea63d8043e4b7da71691d738d95 : FAILURE in 2m 34s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/c32706bb035a4f0e9e527a0c97537e89 : FAILURE in 13m 22s","accounts_in_message":[],"_revision_number":5},{"id":"0784ba9d648029e457afdda944a5ae6c0fd5a0d8","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 10:58:15.000000000","message":"Uploaded patch set 6.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":6},{"id":"11e051d001c748167ffc676aca6c4a162732dc72","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 11:50:41.000000000","message":"Patch Set 6: 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/696bdf511aa5496a8d76890d6f094531\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/7fedad9de62244cda6221369b81a4963 : SUCCESS in 4m 54s\n- requirements-check https://zuul.opendev.org/t/openstack/build/29b0047bf3244d7092e8cd4c3dc5d414 : FAILURE in 3m 49s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/d3c0c27eed394f3f8074b03356d9bb66 : FAILURE in 44m 52s","accounts_in_message":[],"_revision_number":6},{"id":"6c7cb8f1c54a8757e701eee4d590fba421c3ebc3","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 11:53:50.000000000","message":"Uploaded patch set 7.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":7},{"id":"31470f0593b45559cc60118477e1d9d8212cb72a","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 12:31:25.000000000","message":"Patch Set 7: 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/146d8855ad2948c78ed9a9022d572368\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/9acfd635cb3747909b1ac9677fd88134 : SUCCESS in 6m 09s\n- requirements-check https://zuul.opendev.org/t/openstack/build/4f8222c15c5f4b508e5a4715d91df71d : FAILURE in 4m 01s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/87a95a4dc985481bac236b781d0a817e : FAILURE in 27m 49s","accounts_in_message":[],"_revision_number":7},{"id":"db8f115c7eb7c4da6a97173cfb9405fc769f88a5","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 12:56:31.000000000","message":"Uploaded patch set 8.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":8},{"id":"1c489aa2d2db46a2d6a2762d6dca3eb2557c1778","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 13:51:40.000000000","message":"Patch Set 8: 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/1bf3d5eaacf64b48b4b84ec17791c92c\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/5354e7452ddf44f98576452d03eff758 : SUCCESS in 4m 50s\n- requirements-check https://zuul.opendev.org/t/openstack/build/72c2e6cc28864bf4af069db71b16f086 : FAILURE in 3m 58s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/89a96344526f4d468c68f36b5fb8154f : FAILURE in 47m 59s","accounts_in_message":[],"_revision_number":8},{"id":"69ee6f7f9bed30fa8019176a7a87581a8e2b0c18","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 16:17:30.000000000","message":"Uploaded patch set 9.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":9},{"id":"ced0df07fe2cb0ec52502141fa232fbc812d6b65","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 17:07:14.000000000","message":"Patch Set 9: 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/8bbc60ab976d42aa9b13367dbdcceed1\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/d8b9619eace046398f535345bcdd92c3 : SUCCESS in 5m 05s\n- requirements-check https://zuul.opendev.org/t/openstack/build/254369c8dcd5428eb2d2ed262718801d : FAILURE in 3m 42s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/79b7dd3eb21146169a977c13e264a0c9 : FAILURE in 43m 47s","accounts_in_message":[],"_revision_number":9},{"id":"268d0589d344328e7f554a810312ef99399bdd63","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 17:21:59.000000000","message":"Uploaded patch set 10.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":10},{"id":"26f08a3eb2185a102211e1eb7c4f1e6c8e89f606","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 17:57:16.000000000","message":"Patch Set 10: 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/d7fb1b610dd7421e857c4ca20fdcdb83\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/5b02e375d5a04b6fbb4ac30f46f2ce66 : SUCCESS in 4m 32s\n- requirements-check https://zuul.opendev.org/t/openstack/build/c2f22404a11445c596d2f978ce84a49a : FAILURE in 3m 58s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/6f3348ac708946ad85488bb8f3fc18e8 : FAILURE in 31m 20s","accounts_in_message":[],"_revision_number":10},{"id":"0e51afd48244fc34e1609064ae28bdf7b89b9ac4","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 18:25:56.000000000","message":"Uploaded patch set 11.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":11},{"id":"77708cc436d70ded0d54ddb27383926c00d4bf81","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 18:52:01.000000000","message":"Patch Set 11: 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/3bdd5da4dc3341aabe3a24d214c76dd1\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/1d5f4e071d49411c9faad39c91d0daac : SUCCESS in 5m 09s\n- requirements-check https://zuul.opendev.org/t/openstack/build/71c7543a55df4a429a444244808a3de3 : FAILURE in 3m 44s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/0a7fc261308845c18a61a1f9a8b6e404 : FAILURE in 22m 28s","accounts_in_message":[],"_revision_number":11},{"id":"2a0c762b82437964193b934940b07f220d5539da","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 19:07:36.000000000","message":"Uploaded patch set 12.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":12},{"id":"eab93a8a44bd6a41029140bb48d9e2dfffad6366","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 19:33:38.000000000","message":"Patch Set 12: 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/b0b407682e614a78b579d1ad556100f9\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/47a26b778f8445c19082a60dae7c1eee : SUCCESS in 4m 48s\n- requirements-check https://zuul.opendev.org/t/openstack/build/4e223adc4a4343c0b124f80e0afb9863 : FAILURE in 3m 43s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/78a09094a8f7412da6672045a8878119 : FAILURE in 22m 25s","accounts_in_message":[],"_revision_number":12},{"id":"e8cce30af86b6602db62626fbb63011320da34e0","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 19:45:11.000000000","message":"Uploaded patch set 13.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":13},{"id":"03f094b324160c9245ec3ce1be8f09ecd6e7a26c","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 20:07:16.000000000","message":"Patch Set 13: 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/c236ec02c465446f9d5c0e66f0731998\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/c40df80802ea4c5ab0d297eff075f08f : SUCCESS in 4m 58s\n- requirements-check https://zuul.opendev.org/t/openstack/build/c4658cc0602f4ab2921b74d2f83a0198 : FAILURE in 5m 05s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/9dbf9108560a41a6a128e1db7d5fd917 : FAILURE in 13m 53s","accounts_in_message":[],"_revision_number":13},{"id":"12f92746308a5233275373c0180a878af4556d68","tag":"autogenerated:gerrit:newWipPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 21:38:10.000000000","message":"Uploaded patch set 14.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":14},{"id":"2816cebca871e105d9a088b2860bde511d27f05d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 21:54:24.000000000","message":"Patch Set 14: 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/efb4bad5a0a544a9b19f72e301311a5e\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/597e155ba03b413faa33377d7e73ef41 : SUCCESS in 3m 20s\n- requirements-check https://zuul.opendev.org/t/openstack/build/bde9e12dff7045b1ad45e834daaded78 : FAILURE in 3m 20s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/9fc6eb93f9f94b80b03d7e9b126c950a : FAILURE in 11m 56s","accounts_in_message":[],"_revision_number":14},{"id":"bef18d4dc955ef9f61dde077eaa91a744a10d021","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 22:23:09.000000000","message":"Patch Set 14:\n\nrecheck","accounts_in_message":[],"_revision_number":14},{"id":"f67c1b801e571954c7439ba91413114db9651b13","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-29 23:01:18.000000000","message":"Patch Set 14:\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/4c901ad25432449c864bffb3d3d0cc46\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/d0fb51174c6b4442a4db57b0d87db8a7 : SUCCESS in 2m 54s\n- requirements-check https://zuul.opendev.org/t/openstack/build/020328142bb84a89b5a27396488919d8 : FAILURE in 3m 22s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/74b91cb45a344084870838bf9d715480 : FAILURE in 29m 20s","accounts_in_message":[],"_revision_number":14},{"id":"f47fb39af400ae720bea46e1824b31cd53c671d9","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-29 23:57:52.000000000","message":"Patch Set 14:\n\nrecheck","accounts_in_message":[],"_revision_number":14},{"id":"1d7b1bfa94426ddec1017f40679943aeeef0a961","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 00:06:52.000000000","message":"Patch Set 14:\n\nThis change depends on a change that failed to merge.\n\nChange https://review.opendev.org/c/openstack/placement/+/995133 is needed.","accounts_in_message":[],"_revision_number":14},{"id":"7d8dc91238c0f9205088af1696976047153b2e93","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-30 00:20:16.000000000","message":"Patch Set 14:\n\nrecheck","accounts_in_message":[],"_revision_number":14},{"id":"3725d674acd7d4d36b8545e02469f10f3c921f7e","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-30 00:29:09.000000000","message":"Patch Set 14:\n\nrecheck","accounts_in_message":[],"_revision_number":14},{"id":"f9cfdfd02c492c7bfbd0468c767b39a33647cb91","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 00:29:21.000000000","message":"Patch Set 14:\n\nThis change depends on a change that failed to merge.\n\nChanges https://review.opendev.org/c/openstack/placement/+/995133, https://review.opendev.org/c/openstack/devstack/+/995132 are needed.","accounts_in_message":[],"_revision_number":14},{"id":"d0568dbea34e21420c93b4d2dc7cc4645b140cac","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 00:55:33.000000000","message":"Patch Set 14:\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/eeb6e5d3f21f4d8bb069582083d60d61\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/bad61ad44c4e46fdb795950733dc509a : SUCCESS in 5m 02s\n- requirements-check https://zuul.opendev.org/t/openstack/build/fcc1b0fc52514870a55f4dd848ea6d67 : FAILURE in 2m 23s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/51d34884f346424b8e1b7114f430a166 : FAILURE in 17m 50s","accounts_in_message":[],"_revision_number":14},{"id":"0d293f35cbb1a742f00505542ab85e6b71604c95","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-30 05:12:52.000000000","message":"Patch Set 14:\n\nrecheck\n\nKeystone async CR 995251 abandoned. This run should use keystone Phase-0 (995161, green).","accounts_in_message":[],"_revision_number":14},{"id":"5c433a49e3723ed8e09d82de15124cb1fc0e57a8","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 05:34:09.000000000","message":"Patch Set 14:\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/1f1b628f8069427f9f7fa58a3ecc05cc\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/a53272714e2e40f8b9a5816049c4b6fa : SUCCESS in 3m 18s\n- requirements-check https://zuul.opendev.org/t/openstack/build/4b6c3eeade8e45cdbfca181c55dd92e4 : FAILURE in 4m 44s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/f679d6315e74439db36a10f95916c175 : FAILURE in 18m 28s","accounts_in_message":[],"_revision_number":14},{"id":"8bcdc5a059191c65deef913de901f61df773a1f9","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-30 05:53:58.000000000","message":"Patch Set 14:\n\nrecheck","accounts_in_message":[],"_revision_number":14},{"id":"897e350cbb4832ac33b9da76b495c153e61cb578","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 06:27:32.000000000","message":"Patch Set 14:\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/f2f34d23f25e49f38144b8605ded0642\n\n- build-openstack-api-ref https://zuul.opendev.org/t/openstack/build/33faa194e0354006be95d198ad733eda : SUCCESS in 4m 40s\n- requirements-check https://zuul.opendev.org/t/openstack/build/4669ae0c7d254e7dbfd7423f6f301d9c : FAILURE in 4m 03s\n- tempest-integrated-placement-asgi https://zuul.opendev.org/t/openstack/build/32039e9cf170441f8cd1c1b4d8492c00 : FAILURE in 26m 15s","accounts_in_message":[],"_revision_number":14},{"id":"f26136e7b73084f2643f53a73c8356f32995e2d1","tag":"autogenerated:gerrit:abandon","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-01 03:09:19.000000000","message":"Abandoned\n\nBenchmark proved async provides no throughput benefit over thread-pool-tuned WSGI for OpenStack workloads. Preserving Phase 0 (ASGI serving for HTTP/2) only. See full analysis in opencode-workspace/asgi/HANDOFF.md.","accounts_in_message":[],"_revision_number":14}],"current_revision_number":14,"current_revision":"239c2e5efcdfff6e2c080764cdd92a594cc9fe38","revisions":{"771ef5869cec5198fd523db43b1de3f2ed99461d":{"kind":"REWORK","_number":1,"created":"2026-06-29 00:29:13.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/1"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nAdds placement.asgi_native.api:application, a fully native ASGI\napplication that replaces the WSGI routing, middleware, and handler\ndispatch with async equivalents. No webob, no routes library, no\nWSGI-to-ASGI wrapping.\n\nArchitecture:\n- Custom async router with compiled path patterns\n- ASGI middleware stack (oslo_middleware.asgi + keystonemiddleware)\n- Async handlers using asyncio.to_thread() for DB calls\n- Unconverted endpoints return 501 (incremental migration)\n\nCurrently implements handlers for:\n- GET / (version discovery)\n- GET /traits, GET /traits/{name}\n- GET /resource_providers, GET /resource_providers/{uuid}\n\nAll other endpoints return 501 and will be converted incrementally.\nThis enables true async request handling for converted endpoints\nwhile maintaining API compatibility through shared DB/policy layers.\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.middleware/+/995232\nDepends-On: https://review.opendev.org/c/openstack/keystonemiddleware/+/995234\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/771ef5869cec5198fd523db43b1de3f2ed99461d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/771ef5869cec5198fd523db43b1de3f2ed99461d"}]},"branch":"refs/heads/master"},"2cb2376320dd7d79ab60d1cd5b1cb2005fd5432e":{"kind":"REWORK","_number":2,"created":"2026-06-29 07:32:59.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/2"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 07:32:44.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\nDepends-On: https://review.opendev.org/c/openstack/oslo.middleware/+/995232\nDepends-On: https://review.opendev.org/c/openstack/keystonemiddleware/+/995234\nDepends-On: https://review.opendev.org/c/openstack/requirements/+/995246\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2cb2376320dd7d79ab60d1cd5b1cb2005fd5432e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2cb2376320dd7d79ab60d1cd5b1cb2005fd5432e"}]},"branch":"refs/heads/master"},"d2b8449b06ea058a786b6a80f0d77a3c499152a9":{"kind":"NO_CODE_CHANGE","_number":3,"created":"2026-06-29 07:48:11.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/3"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 07:47:46.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d2b8449b06ea058a786b6a80f0d77a3c499152a9"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d2b8449b06ea058a786b6a80f0d77a3c499152a9"}]},"branch":"refs/heads/master"},"93b98f149a7a9a00ff68476c8033b6ce2f527e86":{"kind":"REWORK","_number":4,"created":"2026-06-29 08:57:03.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/4"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 08:56:56.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/93b98f149a7a9a00ff68476c8033b6ce2f527e86"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/93b98f149a7a9a00ff68476c8033b6ce2f527e86"}]},"branch":"refs/heads/master"},"ccc0b1d8b7bbca5185e9a07587a5f04ceead1fa9":{"kind":"REWORK","_number":5,"created":"2026-06-29 09:48:49.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/5"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 09:48:41.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/ccc0b1d8b7bbca5185e9a07587a5f04ceead1fa9"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/ccc0b1d8b7bbca5185e9a07587a5f04ceead1fa9"}]},"branch":"refs/heads/master"},"d8b111b7f3d8acaf6bc0d67f3c4638721da41273":{"kind":"REWORK","_number":6,"created":"2026-06-29 10:58:15.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/6"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 10:58:04.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d8b111b7f3d8acaf6bc0d67f3c4638721da41273"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d8b111b7f3d8acaf6bc0d67f3c4638721da41273"}]},"branch":"refs/heads/master"},"d62152c4227ba5e26566ce8d9dbbed3c85e73f98":{"kind":"REWORK","_number":7,"created":"2026-06-29 11:53:50.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/7"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 11:53:48.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d62152c4227ba5e26566ce8d9dbbed3c85e73f98"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d62152c4227ba5e26566ce8d9dbbed3c85e73f98"}]},"branch":"refs/heads/master"},"09ff4480e4d1c516b4097d43cb6607442b89665e":{"kind":"REWORK","_number":8,"created":"2026-06-29 12:56:31.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/8","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/8","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/8"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 12:56:29.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/09ff4480e4d1c516b4097d43cb6607442b89665e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/09ff4480e4d1c516b4097d43cb6607442b89665e"}]},"branch":"refs/heads/master"},"d101de855058a01275a93b67d23944240b865eb5":{"kind":"REWORK","_number":9,"created":"2026-06-29 16:17:30.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/9","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/9","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/9"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 16:17:27.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d101de855058a01275a93b67d23944240b865eb5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d101de855058a01275a93b67d23944240b865eb5"}]},"branch":"refs/heads/master"},"814a717fb2c678e4e77adeb4e6a374ae3f76517f":{"kind":"REWORK","_number":10,"created":"2026-06-29 17:21:59.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/10","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/10","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/10"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 17:21:57.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/814a717fb2c678e4e77adeb4e6a374ae3f76517f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/814a717fb2c678e4e77adeb4e6a374ae3f76517f"}]},"branch":"refs/heads/master"},"4f598be5771c68ab00e52a5bc2c5c42e0644f57c":{"kind":"REWORK","_number":11,"created":"2026-06-29 18:25:56.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/11","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/11","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/11"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 18:25:54.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/4f598be5771c68ab00e52a5bc2c5c42e0644f57c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/4f598be5771c68ab00e52a5bc2c5c42e0644f57c"}]},"branch":"refs/heads/master"},"5bd08393c32889be8d0c3fe5fb2f3fb6159480b1":{"kind":"REWORK","_number":12,"created":"2026-06-29 19:07:36.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/12","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/12","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/12"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 19:07:25.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/5bd08393c32889be8d0c3fe5fb2f3fb6159480b1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/5bd08393c32889be8d0c3fe5fb2f3fb6159480b1"}]},"branch":"refs/heads/master"},"7ca3e1b66beb696d0b50f4fb43e1c444c1d155e1":{"kind":"REWORK","_number":13,"created":"2026-06-29 19:45:11.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/13","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/13","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/13 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/13 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/13 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/13"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 19:44:52.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\nDepends-On: https://review.opendev.org/c/openstack/oslo.middleware/+/995232\nDepends-On: https://review.opendev.org/c/openstack/keystonemiddleware/+/995234\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7ca3e1b66beb696d0b50f4fb43e1c444c1d155e1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7ca3e1b66beb696d0b50f4fb43e1c444c1d155e1"}]},"branch":"refs/heads/master"},"239c2e5efcdfff6e2c080764cdd92a594cc9fe38":{"kind":"REWORK","_number":14,"created":"2026-06-29 21:38:10.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/35/995235/14","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/35/995235/14","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/14 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/14 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/35/995235/14 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/35/995235/14"}}},"commit":{"parents":[{"commit":"719babbaa0a014a3629f5e34f3a01508842615cc","subject":"Add ASGI application entry point for Placement API","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/719babbaa0a014a3629f5e34f3a01508842615cc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 00:28:59.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-29 21:38:05.000000000","tz":-240},"subject":"Add native ASGI application for Placement API","message":"Add native ASGI application for Placement API\n\nConvert placement to fully native async ASGI:\n\n- deploy.py: ASGI middleware stack (oslo_middleware.asgi + AsyncAuthProtocol)\n- handler.py: compiled-regex ASGI router, all handlers native async\n- objects/: all 122 DB functions use async_placement_context_manager\n- handlers/: all 36 handlers await DB directly (zero asyncio.to_thread)\n- wsgi/: backward-compat entry uses a2wsgi.WSGIMiddleware(asgi_app)\n- tests/: 159 test methods converted to async via IsolatedAsyncioTestCase\n\nArchitecture:\n  ASGI is canonical. Handlers are async def. DB uses oslo.db\n  asyncio_facade (asyncpg/aiosqlite). WSGI path wraps ASGI app\n  via a2wsgi adapter. No sync duplicates — async IS the implementation.\n\n  Middleware stack uses oslo_middleware.asgi (native ASGI, zero webob)\n  and keystonemiddleware.auth_token.asgi.AsyncAuthProtocol for token\n  validation. Falls back gracefully when libs unavailable.\n\nOnly remaining asyncio.to_thread: oslo.messaging notifications\n(sync C library boundary, fire-and-forget).\n\nDepends-On: https://review.opendev.org/c/openstack/oslo.service/+/995128\nDepends-On: https://review.opendev.org/c/openstack/devstack/+/995132\nDepends-On: https://review.opendev.org/c/openstack/oslo.middleware/+/995232\nDepends-On: https://review.opendev.org/c/openstack/keystonemiddleware/+/995234\n\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: Ia13df8420eb3e99aee5a92de7f28d1c8c9a4268f\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/239c2e5efcdfff6e2c080764cdd92a594cc9fe38"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/239c2e5efcdfff6e2c080764cdd92a594cc9fe38"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"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":"Review-Priority","description":"Review Priority","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":"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":""}}}]}
