)]}'
{"id":"openstack%2Fglance~994280","triplet_id":"openstack%2Fglance~master~I0543ddaaff261fa8440f4ef3896ea5da321adaae","project":"openstack/glance","branch":"master","topic":"bug/1452788","attention_set":{"34378":{"account":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"last_update":"2026-06-23 15:58:16.000000000","reason":"\u003cGERRIT_ACCOUNT_8122\u003e replied on the change","reason_account":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"}}},"removed_from_attention_set":{"8122":{"account":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"last_update":"2026-06-23 15:58:16.000000000","reason":"\u003cGERRIT_ACCOUNT_8122\u003e replied on the change","reason_account":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"}}},"hashtags":[],"change_id":"I0543ddaaff261fa8440f4ef3896ea5da321adaae","subject":"Allow idempotent re-delete of half-deleted images","status":"NEW","created":"2026-06-22 12:33:02.000000000","updated":"2026-06-23 15:58:16.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":3,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"7b4e71f0e6f03d32901a253c1a72b34a34df5585","_number":994280,"virtual_id_number":994280,"owner":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-06-22 14:57:45.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"_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":{"CC":[{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},{"_account_id":36805,"name":"Mateusz Klejn","display_name":"Mateusz Klejn","email":"mateusz.klejn@ovhcloud.com","username":"mateusz.klejn","status":"Employee @ OVH"}],"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-22 12:35:12.000000000","updated_by":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"reviewer":{"_account_id":36805,"name":"Mateusz Klejn","display_name":"Mateusz Klejn","email":"mateusz.klejn@ovhcloud.com","username":"mateusz.klejn","status":"Employee @ OVH"},"state":"CC"},{"updated":"2026-06-22 12:56:58.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-22 14:57:45.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-22 16:17:46.000000000","updated_by":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"reviewer":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"state":"CC"}],"messages":[{"id":"37c799d5ecdd086b8b2ce6b4e505dbd0b5c63dd9","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"date":"2026-06-22 12:33:02.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"abdd7f80273634f1dbfeeddc2b242b111ba39d66","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"date":"2026-06-22 12:34:28.000000000","message":"Topic set to bug/1452788","accounts_in_message":[],"_revision_number":1},{"id":"42de28389d1f7baa08e738d4af50424eabd7d0e2","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-22 12:56:58.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/289f8f3acbd14425b054f1d3e7e7b8b1\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/32f782c0bd4f4bb3a817a471ca5f06ff : SUCCESS in 6m 45s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/7b7d51f843e544439e2d283aa9551f1a : SUCCESS in 7m 48s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/9465877dd9d6468bb06d428b2a413f30 : SUCCESS in 11m 35s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"3b39730834827ec32535d977fca46c9ea7d087de","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-22 14:57:45.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/ae1c6993e94546449bec27c7c87618a1\n\n- grenade https://zuul.opendev.org/t/openstack/build/1a286f211f764754a40998a4d1176cd2 : SUCCESS in 1h 11m 02s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/d4294af6add7422da9c47d5ddbf6a2bb : SUCCESS in 58m 57s\n- tempest-integrated-storage https://zuul.opendev.org/t/openstack/build/c747bd5c47004f5baa83c37247138c2e : SUCCESS in 1h 27m 12s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/9b92136de27d42948e84ad598126d33d : SUCCESS in 37m 15s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/1a363e5eb0b64e5ebae3bb232dbbed54 : SUCCESS in 4m 18s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/05a072c2d67648afac3d5411913051e9 : SUCCESS in 3m 41s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/6fe6dbaa5da343abbe29725b7fa5a6ed : SUCCESS in 6m 27s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/464032eeaa424838bd8f7e1fc2e62742 : SUCCESS in 5m 16s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6b2167f63ec64e17aea0572683ab6ef4 : SUCCESS in 6m 04s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/186bd669516d49eebbebc0ad1c80a5a1 : SUCCESS in 7m 56s\n- openstack-tox-functional-py311 https://zuul.opendev.org/t/openstack/build/63f1b32aff8d4d9e86762c9ccc19c008 : SUCCESS in 4m 37s\n- openstack-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/7a917857204e4cf0bbe633912e3086ab : SUCCESS in 6m 09s\n- glance-ceph-thin-provisioning https://zuul.opendev.org/t/openstack/build/9dc28c2999784ba68d27732863aa021e : SUCCESS in 1h 00m 44s (non-voting)\n- tempest-integrated-storage-enforce-scope-new-defaults https://zuul.opendev.org/t/openstack/build/61ecfb18ae4a494f9d8fa2e00d7264c9 : SUCCESS in 2h 15m 06s\n- tempest-integrated-storage-import https://zuul.opendev.org/t/openstack/build/cf28a5c6f5d54c2682328e54f83c5dcf : SUCCESS in 1h 09m 59s\n- glance-multistore-cinder-import https://zuul.opendev.org/t/openstack/build/b9ca1e14ee9046efa4c64d990a89ae8d : SUCCESS in 2h 19m 43s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/dc13423299cd41329d5967e681a324cd : SUCCESS in 34m 06s\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/40b32e7e751949eb808b6e8a10b64b81 : SUCCESS in 1h 41m 35s\n- glance-grenade-centralized-cache https://zuul.opendev.org/t/openstack/build/7397b3b0c38d4ca2958348855713f664 : FAILURE in 12m 17s (non-voting)\n- glance-s3-multistore https://zuul.opendev.org/t/openstack/build/dbf9e8a6a65945599a105c6ec3db5803 : SUCCESS in 2h 03m 31s (non-voting)\n- glance-secure-rbac-protection-functional https://zuul.opendev.org/t/openstack/build/b12e2bcd14094546ade1689553acd46f : SUCCESS in 32m 58s\n- glance-rally-task-uwsgi https://zuul.opendev.org/t/openstack/build/50d8db604b2147aaa49087fe082cc34e : SUCCESS in 25m 21s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"70d6bec6b5534be5474566303e48a6bf5f149002","author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"date":"2026-06-22 16:17:46.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"58bd15f397513f88d7b2ab30abe55ae8e44a60f7","author":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"date":"2026-06-23 06:59:58.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"7b4e71f0e6f03d32901a253c1a72b34a34df5585","author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"date":"2026-06-23 15:58:16.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"6cebb331a0840fc21505bf0907b9f1d137f2b9f5","revisions":{"6cebb331a0840fc21505bf0907b9f1d137f2b9f5":{"kind":"REWORK","_number":1,"created":"2026-06-22 12:33:02.000000000","uploader":{"_account_id":34378,"name":"Julien LE JEUNE","email":"julien.le-jeune@mailops.fr","username":"jlejeune"},"ref":"refs/changes/80/994280/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance","ref":"refs/changes/80/994280/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance refs/changes/80/994280/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance refs/changes/80/994280/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance refs/changes/80/994280/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance refs/changes/80/994280/1"}}},"commit":{"parents":[{"commit":"5cb72da80dd5632c741cedc21e90efa8168f2313","subject":"Add regression test for undeletable half-deleted image","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/5cb72da80dd5632c741cedc21e90efa8168f2313"}]}],"author":{"name":"Julien Le Jeune","email":"julien.le-jeune@ovhcloud.com","date":"2026-06-22 12:05:29.000000000","tz":120},"committer":{"name":"Julien Le Jeune","email":"julien.le-jeune@ovhcloud.com","date":"2026-06-22 12:22:54.000000000","tz":120},"subject":"Allow idempotent re-delete of half-deleted images","message":"Allow idempotent re-delete of half-deleted images\n\nAn image can get stuck with status\u003d\u0027deleted\u0027 while the DB soft-delete\nflag was never committed (delete interrupted between the status update\nand image_destroy, e.g. a worker recycle or a DB failover). Such an\nimage stays visible in image list/show and could not be removed:\nre-deleting raised InvalidImageStatusTransition since no transition was\nallowed out of the \u0027deleted\u0027 state.\n\nAllow the idempotent \u0027deleted\u0027 -\u003e \u0027deleted\u0027 transition so re-deleting\nthrough the normal API re-runs image_destroy and finally completes the\nsoft-delete (deleted\u003d1, cascading to locations, properties, members and\ntags). The inconsistency is now recoverable without direct DB access.\n\nCloses-Bug: #1452788\n\nAssisted-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nChange-Id: I0543ddaaff261fa8440f4ef3896ea5da321adaae\nSigned-off-by: Julien Le Jeune \u003cjulien.le-jeune@ovhcloud.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/6cebb331a0840fc21505bf0907b9f1d137f2b9f5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance/commit/6cebb331a0840fc21505bf0907b9f1d137f2b9f5"}]},"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":""}}}]}
