)]}'
{"id":"openstack%2Fironic-python-agent~1001323","triplet_id":"openstack%2Fironic-python-agent~master~I4359385b850ea5d737b0d766306b77b91f99fea5","project":"openstack/ironic-python-agent","branch":"master","attention_set":{},"removed_from_attention_set":{"36770":{"account":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"last_update":"2026-09-10 05:37:55.000000000","reason":"Change was submitted"},"13252":{"account":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"last_update":"2026-08-29 08:17:54.000000000","reason":"\u003cGERRIT_ACCOUNT_13252\u003e replied on the change","reason_account":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"}},"10342":{"account":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"last_update":"2026-09-09 22:13:41.000000000","reason":"removed on reply"},"39388":{"account":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"last_update":"2026-09-10 05:37:55.000000000","reason":"Change was submitted"}},"hashtags":["ironic-week-prio"],"change_id":"I4359385b850ea5d737b0d766306b77b91f99fea5","subject":"Erase frozen SATA SSDs by discarding them","status":"MERGED","created":"2026-08-18 11:04:12.000000000","updated":"2026-09-10 05:41:16.000000000","submitted":"2026-09-10 05:37:55.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":10,"unresolved_comment_count":4,"has_review_started":true,"submission_id":"1001323","meta_rev_id":"d9299c3e57cd45d73c466eacfae5f0a2d8325dff","_number":1001323,"virtual_id_number":1001323,"owner":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},{"value":0,"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-09-10 05:37:54.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":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"all":[{"value":2,"date":"2026-09-10 04:20:36.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},{"value":2,"date":"2026-09-09 22:13:41.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},{"value":0,"_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":{"approved":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"all":[{"value":1,"date":"2026-09-10 04:20:36.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},{"value":0,"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Backport-Candidate":{"all":[{"value":0,"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},{"value":0,"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Do Not Backport"," 0":"Backport Review Needed","+1":"Should Backport"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"}],"reviewers":{"REVIEWER":[{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-08-18 11:15:31.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-08-18 12:17: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-08-18 12:47:27.000000000","updated_by":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"reviewer":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"state":"REVIEWER"},{"updated":"2026-08-19 15:55:52.000000000","updated_by":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"reviewer":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"state":"CC"},{"updated":"2026-08-25 17:37:03.000000000","updated_by":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"reviewer":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"state":"REVIEWER"},{"updated":"2026-08-25 17:39:22.000000000","updated_by":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"reviewer":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"state":"REVIEWER"},{"updated":"2026-09-10 04:20:36.000000000","updated_by":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"reviewer":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"state":"REVIEWER"}],"messages":[{"id":"f5685fb8468034fcee17496ffe973b04f9ca9177","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-18 11:04:12.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"4acb577e81ef97f1bd04787ffee95d6071d7cb7a","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-18 11:07:51.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"ceba02d76669efbb6488d396d838b96f84b94f83","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-18 11:15:31.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/57c8db7709fe4a10809fe8339b90db0d\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/2b9a4b59ee3c458da95cb33410f8ac62 : SUCCESS in 5m 35s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/018b1d1817814d6e8260f732049cc169 : SUCCESS in 6m 45s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/00406a067e1d4634aa7a1c8e7888f45b : SUCCESS in 7m 04s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"678c0aa5d12a4ef97413b2a743443b2c34026a2b","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-18 12:17:54.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/fee58fb2163e431db919f57ef6b037f5\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/bf2f291c61b34a4682b62e73c6c1e1ee : SUCCESS in 4m 34s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/6b5fd9e7622c4404b91d533c72483edf : SUCCESS in 3m 04s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/fd99066cc27a49299e7ae0002dd4c81e : SUCCESS in 3m 46s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/6144f94f3f13470dbfd1379453b187a3 : SUCCESS in 3m 23s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/6ff79002bbb349c8b3087cd209865855 : SUCCESS in 6m 43s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/7c2e3b20a27e4c2c98f9eab030f178d6 : SUCCESS in 4m 34s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/655edd1d83224e9cab2e343721fa84b0 : SUCCESS in 5m 23s\n- openstack-tox-functional https://zuul.opendev.org/t/openstack/build/2dd8a23a2df6444f97d504f046353ec6 : SUCCESS in 3m 20s\n- ipa-tox-bandit https://zuul.opendev.org/t/openstack/build/7c71c31ea4274ac6946ce31b840100b1 : SUCCESS in 3m 02s\n- ipa-tempest-bios-ipmi-direct-src https://zuul.opendev.org/t/openstack/build/202c9f96f12842919d70f9b20cea2364 : SUCCESS in 1h 08m 28s\n- ipa-tempest-uefi-redfish-vmedia-src https://zuul.opendev.org/t/openstack/build/25c27b88c7014f86a1c073901a2cb05a : SUCCESS in 1h 06m 33s\n- ironic-standalone-ipa-src https://zuul.opendev.org/t/openstack/build/34ed9fc44e174a03bd6049f03d8f23e0 : SUCCESS in 53m 53s\n- ironic-python-agent-check-image-dib-centos9 https://zuul.opendev.org/t/openstack/build/3b5630760c9642d5814b6bf5d54ae63c : SUCCESS in 11m 11s (non-voting)\n- ironic-python-agent-check-image-dib-centos10 https://zuul.opendev.org/t/openstack/build/314e4e477e674339917c797c229f838d : SUCCESS in 7m 11s (non-voting)\n- ironic-python-agent-check-image-dib-debian https://zuul.opendev.org/t/openstack/build/43534a51ce0943a0a6255b33767e7084 : SUCCESS in 7m 06s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"5019fe998c33039b1baa68a423254ff123663c81","tag":"autogenerated:gerrit:setHashtag","author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"date":"2026-08-19 15:54:34.000000000","message":"Hashtag added: ironic-week-prio","accounts_in_message":[],"_revision_number":1},{"id":"4cd577e77186a008cbd3c0ff23403c1e11f11b58","author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"date":"2026-08-19 15:55:52.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"ae4efaface004956392e5460aac073483f479be7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-25 06:07:40.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"2ac1762da0018a61d8fd085f36d325b36b69c586","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-25 06:13:03.000000000","message":"Patch Set 2:\n\nPatch set 2 implements what the meeting on 2026-08-24 asked for.\n\nThe fallback is now gated by a new agent option, [DEFAULT]\nenable_discard_erase, default False, also settable as the kernel command\nline parameter ipa-enable-discard-erase, so an operator can switch it on per\nnode through kernel_append_params without rebuilding the ramdisk.\n\nFollowing agent_enable_ata_secure_erase and agent_enable_nvme_secure_erase\nright next to it, the value can be overridden per node by\nagent_enable_discard_erase in driver_internal_info. That is the hook the\nconductor side would use. I have not proposed the ironic change, since you\nsaid the wiring was optional, and I would rather add it once you tell me\nwhether you want it at all. If you would rather not have an interface that\nnothing sends yet, say so and I will drop that one line.\n\nNothing changes for anyone who does not enable the option, and that claim is\ncarried by the tests rather than by the commit message: patch set 1 had to\nadjust three pre-existing tests, patch set 2 leaves every one of them\nuntouched. Three new tests cover the gate itself, off by default, enabled by\nironic, disabled by ironic on a ramdisk where the option is on.\n\nAlso in this patch set: the release note now says plainly that the sampled\nverification is weaker than a secure erase and that this is why the option\ndefaults to off, and there is a Troubleshooting section for the operator who\nfinds a cleaning run stuck in shred for hours, naming the three ways to\nenable it.\n\nThe bug description is updated as requested.\n\nThe second question from the RFE is still open and I am happy either way: is\nthe sampled verification sufficient, or should a secure discard\n(BLKSECDISCARD) be a hard requirement rather than merely preferred? The\ndrives that prompted this do not implement it, so making it mandatory would\nleave that hardware without a fast erase path, but the code already prefers\nit and turning the preference into a requirement is a small change.","accounts_in_message":[],"_revision_number":2},{"id":"dcdf4513a5aebfb12953bdf100b3d6c2b07858a2","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-25 06:31:24.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/81b88ace9a084493a2eafa5dabe3cddc\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/725113eede7449b1ae8169d00f7f07d8 : SUCCESS in 5m 58s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/c2ea02c80e6d4f3d9abd5e247126116c : SUCCESS in 5m 53s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/f435cf98c33e4efdb4a262ab20a7f957 : SUCCESS in 7m 38s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"63a135d1c31d2ce3ec940cf789041006319cc682","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-25 07:26:42.000000000","message":"Patch Set 2: 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/bef98495737540118dbc34f5c2e4cf09\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/9ef5dbd3335b4b268c0560a61aaf1afa : SUCCESS in 4m 06s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4fab9c3c006646b3b2ed35a03cadb953 : FAILURE in 4m 45s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/fb5ab8491c264a33a9a87d6521a916dc : SUCCESS in 3m 00s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/05f6c6835d9f4996b85992cb78da9760 : SUCCESS in 3m 47s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/54a56c820d614d658f53d331b47d43d4 : SUCCESS in 6m 22s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/3c97904329a54fc4bff9ae9d442f8014 : SUCCESS in 7m 27s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/91f50fa3b82642658d3e5ec4018aad8f : SUCCESS in 5m 11s\n- openstack-tox-functional https://zuul.opendev.org/t/openstack/build/3c461c7ba33248a4a95827851c4ea5ce : SUCCESS in 3m 07s\n- ipa-tox-bandit https://zuul.opendev.org/t/openstack/build/b2a55a0ef2834e41ac57723ed7fc91cc : SUCCESS in 3m 09s\n- ipa-tempest-bios-ipmi-direct-src https://zuul.opendev.org/t/openstack/build/f7e5effd85a84e8c81da10455d2f04fb : SUCCESS in 1h 12m 20s\n- ipa-tempest-uefi-redfish-vmedia-src https://zuul.opendev.org/t/openstack/build/8db6a3b0a4bb4d899572596f40a46cd0 : SUCCESS in 1h 14m 08s\n- ironic-standalone-ipa-src https://zuul.opendev.org/t/openstack/build/bf9ae151f03b44c8a49c8d3f11336d07 : FAILURE in 13m 40s\n- ironic-python-agent-check-image-dib-centos9 https://zuul.opendev.org/t/openstack/build/f140c0d3d7ba4e9bbe8872a277d7d778 : SUCCESS in 4m 51s (non-voting)\n- ironic-python-agent-check-image-dib-centos10 https://zuul.opendev.org/t/openstack/build/05fa4bba623745999c5384d93b23bc7f : SUCCESS in 7m 09s (non-voting)\n- ironic-python-agent-check-image-dib-debian https://zuul.opendev.org/t/openstack/build/5a8f8e6bc36c4322bc3815ceb63d7401 : SUCCESS in 3m 30s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"43d8c163981aea74746ad474204f704738f1a51f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-25 07:28:01.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"94ed4955859df7183b3c278d35a49ff7cc113eb1","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-25 08:02:12.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/ad4eaeeadb82418a8e1e313ccd55d52c\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/e47e0f4fb85340a2921c2913055643e9 : SUCCESS in 7m 17s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/93d2419d50d64727837756f784e2b0e9 : SUCCESS in 5m 33s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/4c96ed8850354d208138f36badf3b463 : SUCCESS in 12m 00s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"3343819b41fb373150efa871a70e3fa62c10e801","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-25 08:46:26.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/a15dfeaac1954ae48d45ea8744e020a5\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/c0db28730deb4dba83166f7a55346574 : SUCCESS in 4m 09s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/48a9ae5c38204606bfcedd9822467880 : SUCCESS in 4m 44s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/a2808006ad7b480b8c74c6c20760c828 : SUCCESS in 4m 08s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/89f162d20bdb4dc59a699e19c299b357 : SUCCESS in 2m 17s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/2198a2ea70554838bf56c1172f3371d0 : SUCCESS in 7m 31s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/03996fc4178f4587b2a342daf082a7f7 : SUCCESS in 8m 24s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/69c6c455705c425f82d31ac25ac946c7 : SUCCESS in 4m 27s\n- openstack-tox-functional https://zuul.opendev.org/t/openstack/build/b33b85fd1b554cd9a73011ec87941582 : SUCCESS in 3m 55s\n- ipa-tox-bandit https://zuul.opendev.org/t/openstack/build/c542fe9f3f9f47019dd7b41e82449ec6 : SUCCESS in 3m 23s\n- ipa-tempest-bios-ipmi-direct-src https://zuul.opendev.org/t/openstack/build/2b060f4d61e44d71bde6e67612cad27d : SUCCESS in 1h 12m 37s\n- ipa-tempest-uefi-redfish-vmedia-src https://zuul.opendev.org/t/openstack/build/047b34ad4d2e496dab70b52e7789abd1 : SUCCESS in 44m 39s\n- ironic-standalone-ipa-src https://zuul.opendev.org/t/openstack/build/b05bbdc5eaeb4268af6421a5e6677f5b : FAILURE in 16m 45s\n- ironic-python-agent-check-image-dib-centos9 https://zuul.opendev.org/t/openstack/build/a0d2ff0dab7d49458ab199eb77390222 : SUCCESS in 8m 04s (non-voting)\n- ironic-python-agent-check-image-dib-centos10 https://zuul.opendev.org/t/openstack/build/a0c7ed4555d34ffcbc62fd5fb04886d4 : SUCCESS in 7m 24s (non-voting)\n- ironic-python-agent-check-image-dib-debian https://zuul.opendev.org/t/openstack/build/472de85e5cbe4d9daef86cf77f426970 : SUCCESS in 3m 45s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"60535c9fdfa5fee4252d2830029c9e0fd3b68d1c","author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"date":"2026-08-25 17:37:03.000000000","message":"Patch Set 3: Code-Review-1\n\n(3 comments)","accounts_in_message":[],"_revision_number":3},{"id":"0152c953211399ce9a39fda164635b1410f7a1f6","author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"date":"2026-08-25 17:39:22.000000000","message":"Patch Set 3: Code-Review+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"413a8c8826c3457185a2308e1e322028fc08050d","author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"date":"2026-08-29 08:17:54.000000000","message":"Patch Set 3:\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"a2d970313334de4af9506a2a26b618b3dfaa2c23","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-29 08:30:52.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/0bf400305d3c42abbaeb3c90d194d9b0\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/7f113078b9c74eb087c574f52735d823 : SUCCESS in 6m 31s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/c363264bda6945228b436d4e941803bd : SUCCESS in 7m 00s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/96e56a1455cc410baf8a314fde34d55f : SUCCESS in 7m 40s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"99795b0c79a2894d790d6ab2952903bae1892457","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-29 09:35:34.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/03a30cfe92db4688961ed15bd8b74efa\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/928b75a2c488431795fce77145af7ad4 : SUCCESS in 4m 10s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/607077cb7b83466b869e8f14f15844fb : SUCCESS in 6m 06s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e71cacbb666e4cde9135565d5bbf42f2 : SUCCESS in 4m 12s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/20719305a4dd4bd7965b6820bd93017e : SUCCESS in 3m 42s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/41313b7bec974060830339fc68f2a167 : SUCCESS in 8m 03s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/fb608a385f53460a8989091a269c7e4f : SUCCESS in 7m 32s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/6868a13d984046ed90b00d0d6787ffb8 : SUCCESS in 6m 53s\n- openstack-tox-functional https://zuul.opendev.org/t/openstack/build/e1aea2e9e5c4482eaf71a506e99f1592 : SUCCESS in 6m 36s\n- ipa-tox-bandit https://zuul.opendev.org/t/openstack/build/33da3a0d518a435e9fb76296f9a5ba22 : SUCCESS in 3m 38s\n- ipa-tempest-bios-ipmi-direct-src https://zuul.opendev.org/t/openstack/build/169252fbb634450e92a1faa73c6c7470 : SUCCESS in 1h 05m 49s\n- ipa-tempest-uefi-redfish-vmedia-src https://zuul.opendev.org/t/openstack/build/602b670e619f4999aaf6f9847bc54085 : SUCCESS in 1h 11m 52s\n- ironic-standalone-ipa-src https://zuul.opendev.org/t/openstack/build/31bbc44f2fb340e1ac0bb2f4088b4d47 : SUCCESS in 47m 22s\n- ironic-python-agent-check-image-dib-centos9 https://zuul.opendev.org/t/openstack/build/8153767cef984533b541226656d72e13 : SUCCESS in 13m 13s (non-voting)\n- ironic-python-agent-check-image-dib-centos10 https://zuul.opendev.org/t/openstack/build/dca6927fa96c428a853763655542a96c : SUCCESS in 15m 20s (non-voting)\n- ironic-python-agent-check-image-dib-debian https://zuul.opendev.org/t/openstack/build/6acc5a5722ed4570a896b90e933c420d : SUCCESS in 5m 44s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"411999eea20f07530a1087f6e3bbd480f65df721","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-31 18:48:57.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Code-Review+1, Code-Review-1 (copy condition: \"changekind:TRIVIAL_REBASE OR is:MIN\")\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"c7b82fad76b868541ed49ae785ff9e9cbf2bfe6f","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-31 18:49:17.000000000","message":"Patch Set 3:\n\n(3 comments)","accounts_in_message":[],"_revision_number":3},{"id":"a2f5ba2e444114982b7ccfaa987aab5950fd065e","author":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"date":"2026-08-31 18:49:28.000000000","message":"Patch Set 4:\n\nPatch set 4 answers all three comments. I replied to each of them inline, so\nthis is only the summary.\n\n* Logging: _discard_erase logs the attempt at INFO and gives a reason on every\n  failure. The blkdiscard errors keep the command output, so you can see whether\n  the tool was missing or the device refused.\n* Documentation: one example and a link now. I did not take over the sentence\n  about vmedia, because we tested exactly that and got the opposite result.\n* Commit message: rewritten and shortened.\n\nI tested this patch set on the hardware from the bug. In our test environment we\nhave 20 nodes of type H13SRE-F, each with two Micron 5400 7.68 TB and two Samsung\nNVMe with 894 GB. The two Micron show the freeze problem, the two Samsung do not.\nBefore the erase we wrote 7155 blocks of 4 KiB to each device, one per GiB, each\nblock with its own offset in it. Then erase_devices ran with the option on, 75 s\nper device against many hours for shred. Afterwards all 7155 positions read back\nas zero on both devices, and a full read of both devices found all 7681501126656\nbytes of each to be zero. So nothing is left over.\n\nThe second question from the RFE is still open and I am still fine either way:\nshould a secure discard be a hard requirement instead of only preferred? The\ndrives here do not support BLKSECDISCARD, so that would leave this hardware\nwithout a fast erase path, but the code already prefers it and making it a\nrequirement is a small change.","accounts_in_message":[],"_revision_number":4},{"id":"98330e3d4285cff3c97e195b286684a00292f2ec","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-31 19:06:48.000000000","message":"Patch Set 4:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/bf822b717d19417d995b8bf4ebeb8adb\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/48521b3396a545b0888698ccdb6e0b61 : SUCCESS in 4m 32s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/28ff4e7a382042b4948e03749c11db8f : SUCCESS in 6m 37s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/491a4f2166794c94b24eff1812439f92 : FAILURE in 9m 01s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"92bc8655e91ecf9c93087f0db0e1265e943deaf1","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-31 19:42:22.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6d658f1a4b4e4031b83bf85607c437c1\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/199e4675b6634e85be1a158419270a8f : SUCCESS in 2m 51s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/2aae2f9191b84464bdd9748ec39ae711 : SUCCESS in 5m 45s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/611c68787e474dadafcc74a80e494801 : SUCCESS in 5m 27s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/1941015329d94f8ca043787c64cfdb11 : SUCCESS in 3m 35s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/92f663ed652c489dbc7aba8ac2cc91b0 : SUCCESS in 5m 26s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/d83c768ac8c34da0b8102075247831b0 : SUCCESS in 3m 56s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/83587ba7e6d94f358a4b928915e04d4e : SUCCESS in 7m 21s\n- openstack-tox-functional https://zuul.opendev.org/t/openstack/build/f0507857eb664ac094c62a01ece2e3d7 : SUCCESS in 2m 14s\n- ipa-tox-bandit https://zuul.opendev.org/t/openstack/build/54b66a01822d4714a04cd042b9e8ac2b : SUCCESS in 2m 42s\n- ipa-tempest-bios-ipmi-direct-src https://zuul.opendev.org/t/openstack/build/3f9a6b296c8c43d48999e51a2af5f078 : SUCCESS in 40m 33s\n- ipa-tempest-uefi-redfish-vmedia-src https://zuul.opendev.org/t/openstack/build/897af12475154eed9e4e6ac0ecad542e : SUCCESS in 29m 00s\n- ironic-standalone-ipa-src https://zuul.opendev.org/t/openstack/build/5442f695f0164104bc1c15690cf0de48 : SUCCESS in 51m 54s\n- ironic-python-agent-check-image-dib-centos9 https://zuul.opendev.org/t/openstack/build/4dca91c08a5f4db29436b26dc452f448 : SUCCESS in 8m 05s (non-voting)\n- ironic-python-agent-check-image-dib-centos10 https://zuul.opendev.org/t/openstack/build/9d23b3d53d094855a9b0bf1e7bb871d1 : FAILURE in 8m 31s (non-voting)\n- ironic-python-agent-check-image-dib-debian https://zuul.opendev.org/t/openstack/build/2ad556c9889f4696a21eb5be24e711b8 : SUCCESS in 4m 22s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"3276663709676c5fed0917029a7a6b2cad84568c","author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"date":"2026-09-09 22:13:41.000000000","message":"Patch Set 4: Code-Review+2","accounts_in_message":[],"_revision_number":4},{"id":"25487594b33998b9dd3a082efdfa56a1d1d083ec","author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"date":"2026-09-10 04:20:36.000000000","message":"Patch Set 4: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":4},{"id":"29c09016eae7e148f0d041729200c7256123c0fd","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-10 04:21:21.000000000","message":"Patch Set 4: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":4},{"id":"8925db50cefd930f791c1d5ef3ec39770cec2851","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-10 05:37:54.000000000","message":"Patch Set 4: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/22ad28d0ecf14d81b698167e8c6c3c2c\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/6ab6d2bc30754f0d87a827299847f432 : SUCCESS in 3m 02s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/483f1a43e9c3493088a3a37f190f3765 : SUCCESS in 3m 44s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/3864cdb34c744eca9d4f9d9c340dfacd : SUCCESS in 3m 04s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a51629acb52746938ab13567d0943e87 : SUCCESS in 4m 08s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/2c4836cda6d24b0da15f54d3d98c14f6 : SUCCESS in 3m 22s\n- openstack-tox-functional https://zuul.opendev.org/t/openstack/build/b853893868694584a2677094bbfa7f88 : SUCCESS in 2m 41s\n- ipa-tox-bandit https://zuul.opendev.org/t/openstack/build/152d53f8ecf447cab2196bdc7bb437fb : SUCCESS in 2m 32s\n- ipa-tempest-bios-ipmi-direct-src https://zuul.opendev.org/t/openstack/build/772ccafd1e9a47cb97ee2f55bf18b6bb : SUCCESS in 1h 11m 33s\n- ipa-tempest-uefi-redfish-vmedia-src https://zuul.opendev.org/t/openstack/build/896430725beb486881eb224c9367e233 : SUCCESS in 33m 34s\n- ironic-standalone-ipa-src https://zuul.opendev.org/t/openstack/build/0a3883c39bcb47f8901c5b36a80a9300 : SUCCESS in 52m 13s","accounts_in_message":[],"_revision_number":4},{"id":"e4154ff77836bcfdcb2e110d4ef12631d279ea70","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-10 05:37:55.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":4},{"id":"d9299c3e57cd45d73c466eacfae5f0a2d8325dff","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-10 05:41:16.000000000","message":"Patch Set 4:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f2f2a1c72d96401b8995f4c53f1a2458\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/cc81740d447e49be8cd44ce8b5e1dd20 : SUCCESS in 1m 10s\n- promote-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/47d1d546a5c745a384642b7ea04da271 : SUCCESS in 57s","accounts_in_message":[],"_revision_number":4}],"current_revision_number":4,"current_revision":"bb18f39fe8be011615c2afee96ba6089fd97480f","revisions":{"219e19e8c8ca1c169bfbecd68001f06a0e2366dd":{"kind":"REWORK","_number":1,"created":"2026-08-18 11:04:12.000000000","uploader":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"ref":"refs/changes/23/1001323/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/ironic-python-agent","ref":"refs/changes/23/1001323/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/1"}}},"commit":{"parents":[{"commit":"3ce553624c20a47a0f1c01cf216db3e1db7e0777","subject":"Merge \"Change md5_enabled default to False\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/3ce553624c20a47a0f1c01cf216db3e1db7e0777"}]}],"author":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-18 07:50:43.000000000","tz":120},"committer":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-18 10:51:30.000000000","tz":120},"subject":"Erase frozen SATA SSDs by discarding them","message":"Erase frozen SATA SSDs by discarding them\n\nSome platform firmware issues both SECURITY FREEZE LOCK and SANITIZE\nFREEZE LOCK to every attached SATA device during POST, without offering a\nsetup option to disable it. Both ATA erase paths are then unavailable for\nthe lifetime of that boot, and suspend to RAM is no way out on platforms\nimplementing only s2idle. erase_devices is left with shred, which on a\n7.68 TB SSD takes many hours, consumes write cycles, and cannot reach\nremapped or over provisioned blocks behind the FTL anyway.\n\nDiscard is unaffected by either freeze. On a device which returns\ndeterministic zeroes afterwards it is both faster and a better result than\nshred, so it is attempted before the shred fallback is considered. It is\ndeliberately not gated on continue_if_disk_secure_erase_fails, because a\nverified discard is an erase and not a weaker substitute for one.\n\nWhether the device really zeroes is established by measurement rather than\nby asking, because the sysfs attributes which look like they would answer\nthe question do not: queue/discard_zeroes_data has reported a constant 0\nsince kernel 4.12, and queue/write_zeroes_max_bytes describes WRITE\nZEROES, which libata does not offer. A recognisable pattern is written to\nthe sampled positions first, so that reading zeroes back proves the\ndiscard removed data which was really there, rather than passing on a\ndevice which was already zeroed.\n\nA secure discard is attempted before a plain one, so devices implementing\nBLKSECDISCARD give a stronger guarantee than the verification alone. Any\nfailure to discard, or to prove the result, reports no success and leaves\nthe pre-existing shred handling to decide what happens. The sampling is a\nsample: it establishes that the mechanism works on the device, not that\nevery block was visited.\n\nThe bulk of this change was written by the tool named below from a\ndescription of the failure, the hardware evidence and the design\nconstraints, then reviewed and corrected by hand. The reworked parts are\nthe placement of the call site, dropping blkdiscard --force so the default\nO_EXCL check is kept, the pattern written before the discard, and the\nsample offsets, which in the first version collapsed onto fewer positions\nthan intended on small devices.\n\nCloses-Bug: #2163748\nGenerated-By: Claude Opus 5\n\nChange-Id: I4359385b850ea5d737b0d766306b77b91f99fea5\nSigned-off-by: Timon Schnell \u003ctimon.schnell@btc-it-services.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/219e19e8c8ca1c169bfbecd68001f06a0e2366dd"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/219e19e8c8ca1c169bfbecd68001f06a0e2366dd"}]},"branch":"refs/heads/master"},"4844e0a72057484bb301b923fb01f1f4db6bc976":{"kind":"REWORK","_number":2,"created":"2026-08-25 06:07:40.000000000","uploader":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"ref":"refs/changes/23/1001323/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/ironic-python-agent","ref":"refs/changes/23/1001323/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/2"}}},"commit":{"parents":[{"commit":"3ce553624c20a47a0f1c01cf216db3e1db7e0777","subject":"Merge \"Change md5_enabled default to False\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/3ce553624c20a47a0f1c01cf216db3e1db7e0777"}]}],"author":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-18 07:50:43.000000000","tz":120},"committer":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-25 06:06:51.000000000","tz":120},"subject":"Erase frozen SATA SSDs by discarding them","message":"Erase frozen SATA SSDs by discarding them\n\nSome platform firmware issues both SECURITY FREEZE LOCK and SANITIZE\nFREEZE LOCK to every attached SATA device during POST, without offering a\nsetup option to disable it. Both ATA erase paths are then unavailable for\nthe lifetime of that boot, and suspend to RAM is no way out on platforms\nimplementing only s2idle. erase_devices is left with shred, which on a\n7.68 TB SSD takes many hours, consumes write cycles, and cannot reach\nremapped or over provisioned blocks behind the FTL anyway.\n\nDiscard is unaffected by either freeze. On a device which returns\ndeterministic zeroes afterwards it is both faster and a better result than\nshred, so it is attempted before the shred fallback is considered.\n\nThe path is opt in and off by default, gated by the new option\n[DEFAULT] enable_discard_erase, as asked for in the ironic meeting on\n2026-08-24. Nothing changes for anyone who does not enable it, which is why\nno existing test needed touching. Following the ATA and NVMe erase options\nnext to it, the value can be overridden per node through\nagent_enable_discard_erase in driver_internal_info, so a conductor side\noption can drive it later; that is a separate change in ironic and is not\nrequired for this one. Enabling it stays a decision separate from the shred\nfallback: once it is on, a verified discard counts as an erase even on a\nnode where continue_if_disk_secure_erase_fails is false.\n\nWhether the device really zeroes is established by measurement rather than\nby asking, because the sysfs attributes which look like they would answer\nthe question do not: queue/discard_zeroes_data has reported a constant 0\nsince kernel 4.12, and queue/write_zeroes_max_bytes describes WRITE\nZEROES, which libata does not offer. A recognisable pattern is written to\nthe sampled positions first, so that reading zeroes back proves the\ndiscard removed data which was really there, rather than passing on a\ndevice which was already zeroed.\n\nA secure discard is attempted before a plain one, so devices implementing\nBLKSECDISCARD give a stronger guarantee than the verification alone. Any\nfailure to discard, or to prove the result, reports no success and leaves\nthe pre-existing shred handling to decide what happens. The sampling is a\nsample: it establishes that the mechanism works on the device, not that\nevery block was visited, and that is why the option defaults to off.\n\nThe bulk of this change was written by the tool named below from a\ndescription of the failure, the hardware evidence and the design\nconstraints, then reviewed and corrected by hand. The reworked parts are\nthe placement of the call site, dropping blkdiscard --force so the default\nO_EXCL check is kept, the pattern written before the discard, and the\nsample offsets, which in the first version collapsed onto fewer positions\nthan intended on small devices.\n\nCloses-Bug: #2163748\nGenerated-By: Claude Opus 5\n\nChange-Id: I4359385b850ea5d737b0d766306b77b91f99fea5\nSigned-off-by: Timon Schnell \u003ctimon.schnell@btc-it-services.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/4844e0a72057484bb301b923fb01f1f4db6bc976"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/4844e0a72057484bb301b923fb01f1f4db6bc976"}]},"branch":"refs/heads/master"},"ba02c518d77c4a63f4f39acf3fb43e34d4e9cb60":{"kind":"REWORK","_number":3,"created":"2026-08-25 07:28:01.000000000","uploader":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"ref":"refs/changes/23/1001323/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/ironic-python-agent","ref":"refs/changes/23/1001323/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/3"}}},"commit":{"parents":[{"commit":"3ce553624c20a47a0f1c01cf216db3e1db7e0777","subject":"Merge \"Change md5_enabled default to False\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/3ce553624c20a47a0f1c01cf216db3e1db7e0777"}]}],"author":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-18 07:50:43.000000000","tz":120},"committer":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-25 07:27:53.000000000","tz":120},"subject":"Erase frozen SATA SSDs by discarding them","message":"Erase frozen SATA SSDs by discarding them\n\nSome platform firmware issues both SECURITY FREEZE LOCK and SANITIZE\nFREEZE LOCK to every attached SATA device during POST, without offering a\nsetup option to disable it. Both ATA erase paths are then unavailable for\nthe lifetime of that boot, and suspend to RAM is no way out on platforms\nimplementing only s2idle. erase_devices is left with shred, which on a\n7.68 TB SSD takes many hours, consumes write cycles, and cannot reach\nremapped or over provisioned blocks behind the FTL anyway.\n\nDiscard is unaffected by either freeze. On a device which returns\ndeterministic zeroes afterwards it is both faster and a better result than\nshred, so it is attempted before the shred fallback is considered.\n\nThe path is opt in and off by default, gated by the new option\n[DEFAULT] enable_discard_erase, as asked for in the ironic meeting on\n2026-08-24. Nothing changes for anyone who does not enable it, which is why\nno existing test needed touching. Following the ATA and NVMe erase options\nnext to it, the value can be overridden per node through\nagent_enable_discard_erase in driver_internal_info, so a conductor side\noption can drive it later; that is a separate change in ironic and is not\nrequired for this one. Enabling it stays a decision separate from the shred\nfallback: once it is on, a verified discard counts as an erase even on a\nnode where continue_if_disk_secure_erase_fails is false.\n\nWhether the device really zeroes is established by measurement rather than\nby asking, because the sysfs attributes which look like they would answer\nthe question do not: queue/discard_zeroes_data has reported a constant 0\nsince kernel 4.12, and queue/write_zeroes_max_bytes describes WRITE\nZEROES, which libata does not offer. A recognisable pattern is written to\nthe sampled positions first, so that reading zeroes back proves the\ndiscard removed data which was really there, rather than passing on a\ndevice which was already zeroed.\n\nA secure discard is attempted before a plain one, so devices implementing\nBLKSECDISCARD give a stronger guarantee than the verification alone. Any\nfailure to discard, or to prove the result, reports no success and leaves\nthe pre-existing shred handling to decide what happens. The sampling is a\nsample: it establishes that the mechanism works on the device, not that\nevery block was visited, and that is why the option defaults to off.\n\nThe bulk of this change was written by the tool named below from a\ndescription of the failure, the hardware evidence and the design\nconstraints, then reviewed and corrected by hand. The reworked parts are\nthe placement of the call site, dropping blkdiscard --force so the default\nO_EXCL check is kept, the pattern written before the discard, and the\nsample offsets, which in the first version collapsed onto fewer positions\nthan intended on small devices.\n\nCloses-Bug: #2163748\nGenerated-By: Claude Opus 5\n\nChange-Id: I4359385b850ea5d737b0d766306b77b91f99fea5\nSigned-off-by: Timon Schnell \u003ctimon.schnell@btc-it-services.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/ba02c518d77c4a63f4f39acf3fb43e34d4e9cb60"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/ba02c518d77c4a63f4f39acf3fb43e34d4e9cb60"}]},"branch":"refs/heads/master"},"bb18f39fe8be011615c2afee96ba6089fd97480f":{"kind":"REWORK","_number":4,"created":"2026-08-31 18:48:57.000000000","uploader":{"_account_id":39388,"name":"Timon Schnell","display_name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","username":"kingspeedy"},"ref":"refs/changes/23/1001323/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/ironic-python-agent","ref":"refs/changes/23/1001323/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/ironic-python-agent refs/changes/23/1001323/4"}}},"commit":{"parents":[{"commit":"421d532bf17698a058303de2182ad72f5af58cd1","subject":"Fix ironic-standalone-ipa-src configuration","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/421d532bf17698a058303de2182ad72f5af58cd1"}]}],"author":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-18 07:50:43.000000000","tz":120},"committer":{"name":"Timon Schnell","email":"timon.schnell@btc-it-services.com","date":"2026-08-31 18:44:29.000000000","tz":120},"subject":"Erase frozen SATA SSDs by discarding them","message":"Erase frozen SATA SSDs by discarding them\n\nSome platform firmware sends SECURITY FREEZE LOCK and SANITIZE FREEZE\nLOCK to every SATA device during POST, and there is no setup option to\nturn it off. Both ATA erase paths are gone for that boot, so\nerase_devices falls back to shred. On a 7.68 TB SSD that runs for hours,\nand it still does not reach the blocks the FTL has remapped.\n\nDiscard is not affected by the freeze, so try it before shred. A secure\ndiscard is tried first, then a plain one. The result is not trusted, it\nis measured: write a pattern to sampled positions, discard the device,\ndrop the buffer cache, and require those positions to read back as\nzeroes. Without the pattern a device that was already zero would pass.\n\nThe path is off by default, [DEFAULT] enable_discard_erase, as asked for\nin the ironic meeting on 2026-08-24. It can be set per node with\nagent_enable_discard_erase. Nothing changes if it stays off, and no\nexisting test needed a change.\n\nThe check is a sample. It shows that discard erases this device, not\nthat every block was visited. That is why the default is off.\n\nTested on the hardware from the bug, see the review comments.\n\nDrafted with the tool named below, then reworked and verified by hand.\n\nCloses-Bug: #2163748\nGenerated-By: Claude Opus 5\n\nChange-Id: I4359385b850ea5d737b0d766306b77b91f99fea5\nSigned-off-by: Timon Schnell \u003ctimon.schnell@btc-it-services.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/bb18f39fe8be011615c2afee96ba6089fd97480f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/ironic-python-agent/commit/bb18f39fe8be011615c2afee96ba6089fd97480f"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"}},{"label":"Backport-Candidate","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Backport-Candidate","description":"Backport candidate status","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
