)]}'
{"id":"openstack%2Fglance~994715","triplet_id":"openstack%2Fglance~master~I1edd2be6aed7b7251c6323830cd4400ad4b74d11","project":"openstack/glance","branch":"master","topic":"redundant-downloads","attention_set":{"19138":{"account":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"last_update":"2026-06-24 15:37:44.000000000","reason":"A robot voted negatively on a label"},"9303":{"account":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"last_update":"2026-06-24 13:23:02.000000000","reason":"\u003cGERRIT_ACCOUNT_19138\u003e replied on the change","reason_account":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"}},"8122":{"account":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"last_update":"2026-06-24 13:23:02.000000000","reason":"\u003cGERRIT_ACCOUNT_19138\u003e replied on the change","reason_account":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"}}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I1edd2be6aed7b7251c6323830cd4400ad4b74d11","subject":"POC: Eliminate redundant downloads for uncached images","status":"NEW","created":"2026-06-24 13:18:09.000000000","updated":"2026-06-30 15:30:11.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":"25adbd6be716d5ff4a5c38238147644fba3a4f53","_number":994715,"virtual_id_number":994715,"owner":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},{"tag":"autogenerated:zuul:check","value":1,"date":"2026-06-30 15:30:11.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":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},{"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":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},{"_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":-1,"max":2},"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},{"value":0,"permitted_voting_range":{"min":-1,"max":2},"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Branch Freeze"," 0":"No Priority","+1":"Important Change","+2":"Top Priority / Holds Gate"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-24 13:23:02.000000000","updated_by":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"reviewer":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"state":"REVIEWER"},{"updated":"2026-06-24 13:23:02.000000000","updated_by":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"reviewer":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"state":"REVIEWER"},{"updated":"2026-06-24 14:17:16.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-06-24 15:37:44.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":"5b72c97460d313ed1ad72b94b7544502e9570c3b","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"date":"2026-06-24 13:18:09.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"a89105d0bb1e2a2c1fb560e7747b1baf71b9405c","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"date":"2026-06-24 13:22:39.000000000","message":"Topic set to redundant-downloads","accounts_in_message":[],"_revision_number":1},{"id":"7954b0f9d129ec2c2ba6898c32e5766851bf1753","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-24 14:17:16.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d72056d3db5849ee9c7e27f8f5fe07dc\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/af925d7d9d1e40bca3bc406f6347385b : SUCCESS in 11m 35s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/52f54767ca6a4131bd9f90a9987484e9 : SUCCESS in 8m 17s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/e4585884e60b4911a92df30b8d151f8e : SUCCESS in 18m 34s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"a31c76c72195cfcc0409671dbfe4fbcc6cbdab1c","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-24 15:37:44.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/28da9875341e491cb78b679499672072\n\n- grenade https://zuul.opendev.org/t/openstack/build/eebefb7abc1c4b19b4724c747c6eb5a6 : SUCCESS in 1h 00m 04s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/f3bf92bde98c406c9160fbf311dce82f : SUCCESS in 56m 52s\n- tempest-integrated-storage https://zuul.opendev.org/t/openstack/build/70459a2efda4414ba1f8500714a59d35 : SUCCESS in 1h 20m 41s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/d7d2e2fddb944e449ebb748ed06b2a60 : SUCCESS in 1h 09m 40s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4b7129a875ee480fbbc73390b8595ddc : SUCCESS in 4m 28s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/da991f3e182c472fab09236e4732c1bf : SUCCESS in 5m 37s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/075e55eb50924e099df4dc3b5c81f93d : SUCCESS in 3m 45s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/e95f2f548ca94081897368dffe9e80d8 : SUCCESS in 7m 56s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/1d4ce1a782164876916f9b8133317396 : SUCCESS in 5m 58s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/daa8921506bf404e9553b9a705ecf177 : SUCCESS in 7m 34s\n- openstack-tox-functional-py311 https://zuul.opendev.org/t/openstack/build/5d733af31aeb4771a6a24f8533490a65 : FAILURE in 6m 32s\n- openstack-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/8c28b8a3b6344ebcad70b26f45eeb359 : FAILURE in 6m 17s\n- glance-ceph-thin-provisioning https://zuul.opendev.org/t/openstack/build/91d43470a29a4a779277848f58e5281b : SUCCESS in 2h 03m 37s (non-voting)\n- tempest-integrated-storage-enforce-scope-new-defaults https://zuul.opendev.org/t/openstack/build/4fced6fa601e404fa1083ca9d995260d : SUCCESS in 1h 33m 08s\n- tempest-integrated-storage-import https://zuul.opendev.org/t/openstack/build/298f0f1f569d4e02ac9e510af3cd96df : SUCCESS in 1h 33m 55s\n- glance-multistore-cinder-import https://zuul.opendev.org/t/openstack/build/2e11f17f60534575a81615fc25168805 : SUCCESS in 2h 03m 03s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/1e0d2a8c432944f39f0b70848208178e : SUCCESS in 1h 00m 59s\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/90e771efb46c450ca3b883ec2ae0d50c : SUCCESS in 1h 56m 15s\n- glance-grenade-centralized-cache https://zuul.opendev.org/t/openstack/build/e601e36f562c4a278c51d2319fb4d41e : FAILURE in 14m 36s (non-voting)\n- glance-s3-multistore https://zuul.opendev.org/t/openstack/build/dd52a2201ef74329ae271b3e62833827 : FAILURE in 2h 11m 22s (non-voting)\n- glance-secure-rbac-protection-functional https://zuul.opendev.org/t/openstack/build/22512a01b3d34fe69d96fbd07277eea6 : SUCCESS in 24m 07s\n- glance-rally-task-uwsgi https://zuul.opendev.org/t/openstack/build/7da707c8b6884c5e88bde34422cfc56a : SUCCESS in 36m 41s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"ac9e343d867929b9f5da3301a3fa6cacc1c2615c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"date":"2026-06-30 12:39:50.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"9a99112bdcba274ff896b0616287b1d2ebf886a7","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 12:50:35.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d79a8190a22f4ff183d4aabf3174b6ad\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/a1ea0cac6ffc47308f3306eea1990cd5 : SUCCESS in 8m 01s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/a7876f8baddd41789e417e26cc1780be : SUCCESS in 7m 52s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/4488d69e52c641e8ac60d71075e9ab26 : SUCCESS in 8m 45s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"25adbd6be716d5ff4a5c38238147644fba3a4f53","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-30 15:30:11.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f9b160fd727e4d3eb03f2f59baad1b88\n\n- grenade https://zuul.opendev.org/t/openstack/build/da16943e40e14a3386b7be66b8534ad8 : SUCCESS in 1h 02m 44s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/cffd7ffdfb004ff4affc02f04ed282eb : SUCCESS in 1h 03m 12s\n- tempest-integrated-storage https://zuul.opendev.org/t/openstack/build/5b7822d617cc4976b7308eb82ef36bd1 : SUCCESS in 1h 42m 52s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/bd40a7b893f147e08f6dbcfc2cf5333e : SUCCESS in 47m 43s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/f6c52ed8c67e4a69901e58c0e781b380 : SUCCESS in 5m 53s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/b79ef193668a4751a0fef2186fc656df : SUCCESS in 4m 51s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/e2158c4b1b4d479eb4990ea234e2c840 : SUCCESS in 4m 51s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/1046dbc05e1e47458ab35ebcece346ec : SUCCESS in 8m 44s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c2a2f99b5b72472893dbdee3b72b0d45 : SUCCESS in 3m 08s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/e8b5588316da4f53b2c45b4afccccc32 : SUCCESS in 8m 05s\n- openstack-tox-functional-py311 https://zuul.opendev.org/t/openstack/build/2bd79f79dd5f4e51b422c137cbd2c260 : SUCCESS in 6m 28s\n- openstack-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/06e66f5bd18b48139c2b3b11c0adeba6 : SUCCESS in 9m 09s\n- glance-ceph-thin-provisioning https://zuul.opendev.org/t/openstack/build/867b5170caa644a384e9e7325f6174fc : SUCCESS in 1h 46m 56s (non-voting)\n- tempest-integrated-storage-enforce-scope-new-defaults https://zuul.opendev.org/t/openstack/build/9bc5f98eaecc4a288708a3116aa71271 : SUCCESS in 2h 06m 17s\n- tempest-integrated-storage-import https://zuul.opendev.org/t/openstack/build/6cb8a8e7cde34a78a505cc5269771b4a : SUCCESS in 2h 10m 40s\n- glance-multistore-cinder-import https://zuul.opendev.org/t/openstack/build/42f8aa159d9c48259f0b0802f2b49019 : SUCCESS in 2h 36m 12s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/50be3962e686421881a0b1ab33603bb9 : SUCCESS in 41m 46s\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/a95e9994792c4b5a8c45e2ba8b0460aa : SUCCESS in 1h 39m 34s\n- glance-s3-multistore https://zuul.opendev.org/t/openstack/build/d685e96b284b45309e1326cc05afbf74 : SUCCESS in 2h 02m 53s (non-voting)\n- glance-secure-rbac-protection-functional https://zuul.opendev.org/t/openstack/build/420396868508456f9bdd9008086f5ea9 : SUCCESS in 40m 23s\n- glance-rally-task-uwsgi https://zuul.opendev.org/t/openstack/build/dc16a4e6a4ca4bbf8d8d9821bc638aee : FAILURE in 58m 46s (non-voting)","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"29c15a3304f8837995f7b9081e3d226a95549f0c","revisions":{"97dce741d5dab41f40917c356524e2563bb82e70":{"kind":"REWORK","_number":1,"created":"2026-06-24 13:18:09.000000000","uploader":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"ref":"refs/changes/15/994715/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance","ref":"refs/changes/15/994715/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance refs/changes/15/994715/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance refs/changes/15/994715/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance refs/changes/15/994715/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance refs/changes/15/994715/1"}}},"commit":{"parents":[{"commit":"a9e8de931c44726b9308dd280dfe0acef2cb29e1","subject":"Merge \"Remove eventlet thread pool model from glance.async_\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/a9e8de931c44726b9308dd280dfe0acef2cb29e1"}]}],"author":{"name":"Pranali Deore","email":"pdeore@redhat.com","date":"2026-06-24 12:29:44.000000000","tz":0},"committer":{"name":"Pranali Deore","email":"pdeore@redhat.com","date":"2026-06-24 13:15:57.000000000","tz":0},"subject":"POC: Eliminate redundant downloads for uncached images","message":"POC: Eliminate redundant downloads for uncached images\n\nThis change implements a POC for eliminating redundant\nbackend downloads during concurrent image file requests.\nOne request caches the image; the others wait and stream\nfrom the same cache file.\n\n* Adds cache_locking with a per-image fill lock (fcntl on\n  locks/\u003cimage_id\u003e.fill), waiting_image_iter to stream from\n  incomplete/ then the completed cache file, and lock release\n  when the caching worker finishes.\n* Routes uncached requests in cache middleware: serve from\n  cache if present; otherwise wait (no backend download) if\n  a fill is in progress or the lock is held; else acquire the\n  lock and download as the sole caching worker.\n* Releases the fill lock on non-success response paths and wrap\n  the caching iterator so the lock is held for the full\n  download/write.\n* Added unit tests for locking, waiting iterator behavior, and the\n  middleware waiting-request path.\n\nChange-Id: I1edd2be6aed7b7251c6323830cd4400ad4b74d11\nSigned-off-by: Pranali Deore \u003cpdeore@redhat.com\u003e\nAssisted-By: Cursor (claude-4.5-sonnet)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/97dce741d5dab41f40917c356524e2563bb82e70"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/97dce741d5dab41f40917c356524e2563bb82e70"}]},"branch":"refs/heads/master"},"29c15a3304f8837995f7b9081e3d226a95549f0c":{"kind":"REWORK","_number":2,"created":"2026-06-30 12:39:50.000000000","uploader":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"ref":"refs/changes/15/994715/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance","ref":"refs/changes/15/994715/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance refs/changes/15/994715/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance refs/changes/15/994715/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance refs/changes/15/994715/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance refs/changes/15/994715/2"}}},"commit":{"parents":[{"commit":"b519bf5c856014924de65c74560f4e702dcf8939","subject":"Merge \"fix(rally-test): Update rally image location\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/b519bf5c856014924de65c74560f4e702dcf8939"}]}],"author":{"name":"Pranali Deore","email":"pdeore@redhat.com","date":"2026-06-24 12:29:44.000000000","tz":0},"committer":{"name":"Pranali Deore","email":"pdeore@redhat.com","date":"2026-06-30 12:38:51.000000000","tz":0},"subject":"POC: Eliminate redundant downloads for uncached images","message":"POC: Eliminate redundant downloads for uncached images\n\nThis change implements a POC for eliminating redundant\nbackend downloads during concurrent image file requests.\nOne request caches the image; the others wait and stream\nfrom the same cache file.\n\n* Adds cache_locking with a per-image fill lock (fcntl on\n  locks/\u003cimage_id\u003e.fill), waiting_image_iter to stream from\n  incomplete/ then the completed cache file, and lock release\n  when the caching worker finishes.\n* Routes uncached requests in cache middleware: serve from\n  cache if present; otherwise wait (no backend download) if\n  a fill is in progress or the lock is held; else acquire the\n  lock and download as the sole caching worker.\n* Releases the fill lock on non-success response paths and wrap\n  the caching iterator so the lock is held for the full\n  download/write.\n* Added unit tests for locking, waiting iterator behavior, and the\n  middleware waiting-request path.\n\nChange-Id: I1edd2be6aed7b7251c6323830cd4400ad4b74d11\nSigned-off-by: Pranali Deore \u003cpdeore@redhat.com\u003e\nAssisted-By: Cursor (claude-4.5-sonnet)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/29c15a3304f8837995f7b9081e3d226a95549f0c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/29c15a3304f8837995f7b9081e3d226a95549f0c"}]},"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":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Review-Priority","description":"Review priority","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"-label:Review-Priority\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":[],"failing_atoms":["label:Review-Priority\u003dMIN"],"atom_explanations":{"label:Review-Priority\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":""}}}]}
