)]}'
{"/COMMIT_MSG":[{"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"},"change_message_id":"d0af42ff38a84d7f164c94f76dcaf7531f45d4a0","unresolved":true,"context_lines":[{"line_number":11,"context_line":"introduced a couple bugs which were uncaught."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #2080871"},{"line_number":14,"context_line":"Co-Authored-By: Morten Stephansen \u003cmorten.kaastrup.stephansen@cern.ch\u003e"},{"line_number":15,"context_line":"Signed-off-by: Jakub Jelinek \u003cjakub.jelinek@cern.ch\u003e"},{"line_number":16,"context_line":"Signed-off-by: Morten Stephansen \u003cmorten.kaastrup.stephansen@cern.ch\u003e"},{"line_number":17,"context_line":"Change-Id: I59b65c6b69af2385ed8a5dcd427e4d9c91f90abe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"b1b70085_6703b899","line":14,"updated":"2025-09-08 16:18:42.000000000","message":"nit: these are generally redundant when using Signed-off-by","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1bba2a5f28934a89528b451a032b15c120b073ca","unresolved":false,"context_lines":[{"line_number":11,"context_line":"introduced a couple bugs which were uncaught."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #2080871"},{"line_number":14,"context_line":"Co-Authored-By: Morten Stephansen \u003cmorten.kaastrup.stephansen@cern.ch\u003e"},{"line_number":15,"context_line":"Signed-off-by: Jakub Jelinek \u003cjakub.jelinek@cern.ch\u003e"},{"line_number":16,"context_line":"Signed-off-by: Morten Stephansen \u003cmorten.kaastrup.stephansen@cern.ch\u003e"},{"line_number":17,"context_line":"Change-Id: I59b65c6b69af2385ed8a5dcd427e4d9c91f90abe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"51d6b92a_cb030de1","line":14,"in_reply_to":"b1b70085_6703b899","updated":"2025-09-10 15:03:56.000000000","message":"Acknowledged","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc68bc77335d73ad68b9312d8b480e35fb78ae62","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The original implementation of the skip block devices for RAID arrays:"},{"line_number":10,"context_line":"https://review.opendev.org/c/openstack/ironic-python-agent/+/852999"},{"line_number":11,"context_line":"introduced a couple bugs which were uncaught."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #2080871"},{"line_number":14,"context_line":"Signed-off-by: Jakub Jelinek \u003cjakub.jelinek@cern.ch\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"79ccf203_055edf49","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":44},"updated":"2025-09-15 14:43:32.000000000","message":"This is not a great commit message. At the very least, the \"couple of bugs\" should be mentioned here. Ideally, each of them needs to be fixed separately. Reviewing this patch without context is.. not fun to put it politely. Please keep this in mind next time.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1af2ed303a834c6197a656baa8b3162f3dc95051","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The original implementation of the skip block devices for RAID arrays:"},{"line_number":10,"context_line":"https://review.opendev.org/c/openstack/ironic-python-agent/+/852999"},{"line_number":11,"context_line":"introduced a couple bugs which were uncaught."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #2080871"},{"line_number":14,"context_line":"Signed-off-by: Jakub Jelinek \u003cjakub.jelinek@cern.ch\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"c74590db_aa2318f8","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":44},"in_reply_to":"79ccf203_055edf49","updated":"2025-09-17 13:49:17.000000000","message":"Sorry, forgot to update it once we found all bugs. Meant to do it.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"bf3d4138ef824c1d7ace9dc36a2ada0f0996ab48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6263d627_237028c3","updated":"2025-08-22 15:11:22.000000000","message":"Tests and docs to be added next week","commit_id":"55caeb3da3d4e0ecd9d7426c39a81e6d214a26e0"},{"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"},"change_message_id":"dadae8695a714c84b9d943ff144d4501d6b44629","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d9f8979e_a17b9568","updated":"2025-09-08 17:44:19.000000000","message":"(reposting the claude bit for formatting improvements)\n\n---\n\n  Issue 2: RAID Device Without Volume Name Causes Cleaning Failure\n\n  Call Chain:\n  1. During cleaning → erase_devices_metadata() → _list_erasable_devices() → Eventually RAID configuration\n  2. _do_create_configuration() → _create_ignore_list() (ironic_python_agent/hardware.py:3044)\n  3. At lines 3089-3093, existing RAID devices are scanned and their volume names collected\n  4. If a RAID device has no volume name, None is added to list_of_raids\n  5. At line 3133-3136, if list_of_raids is not empty after processing, it raises an error\n\n  The Problem:\n\n  When skip_list is configured and there\u0027s an existing RAID device without a volume name:\n\n  1. Line 3091-3093: If get_volume_name_of_raid_device() returns None/empty, the code adds None to\n  list_of_raids\n  2. Line 3100: The check if volume_name in list_of_raids: will match if the logical disk also has no\n  volume_name (None)\n  3. Line 3133: After processing, if None remains in list_of_raids, the error is raised: \"Existing\n  Software RAID device detected that should not\"\n\n  This means any existing RAID device without a volume name will cause cleaning to fail when\n  skip_block_devices is configured with RAID volume names.\n\n\n---\n\n  Issue 3: IndexError on Empty rd_name List\n\n  Location: ironic_python_agent/hardware.py:3112 and 3125\n\n  When trying to access rd_name[0], if no matching volume_name is found in volume_name_of_raid_devices,\n  the list comprehension returns an empty list, causing an IndexError:\n\n  rd_name \u003d [rd_name for rd_name, v_name in\n             volume_name_of_raid_devices.items()\n             if volume_name \u003d\u003d v_name]\n  if delete_raid_devices[rd_name[0]] !\u003d \u0027wipe\u0027 or ...  # IndexError if rd_name is empty\n\n---\n\n\n  Summary of Failure Scenarios\n\n  1. IndexError at line 3082: When get_component_devices() returns empty list (corrupted RAID metadata)\n  2. SoftwareRAIDError at line 3133-3136: When existing RAID device has no volume_name\n  3. IndexError at lines 3112, 3125: When no matching volume_name found in dictionary\n\n  All these cases can be triggered by modifying RAID metadata on disk to either:\n  - Corrupt it partially (Issue 1)\n  - Remove volume names from metadata (Issues 2, 3)\n\n\nThe common thread is that the code assumes RAID devices will always have valid metadata with volume names when skip_block_devices is configured, but this assumption can be violated through disk corruption or manual metadata modification.","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"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"},"change_message_id":"b49cc252082b4556d54ea4a9cd9797c7a17096fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d619ffe7_e3272092","updated":"2025-09-08 17:38:33.000000000","message":"I asked claude to evaluate this for cases where changing raid metadata on disk could cause failures; here\u0027s the curated list of issues it found (they seem valid to me). I removed a couple of invalid findings (e.g. it was upset that changing the raid state on disk could break earlier assumptions; but if anything but IPA is performing raid actions during cleaning we\u0027re already in trouble). The first issue I validated manually and put in my own words inline; this second issue has been validated manually by me, too:\n\n  Issue 2: RAID Device Without Volume Name Causes Cleaning Failure\n\n  Call Chain:\n  1. During cleaning → erase_devices_metadata() → _list_erasable_devices() → Eventually RAID configuration\n  2. _do_create_configuration() → _create_ignore_list() (ironic_python_agent/hardware.py:3044)\n  3. At lines 3089-3093, existing RAID devices are scanned and their volume names collected\n  4. If a RAID device has no volume name, None is added to list_of_raids\n  5. At line 3133-3136, if list_of_raids is not empty after processing, it raises an error\n\n  The Problem:\n\n  When skip_list is configured and there\u0027s an existing RAID device without a volume name:\n\n  1. Line 3091-3093: If get_volume_name_of_raid_device() returns None/empty, the code adds None to\n  list_of_raids\n  2. Line 3100: The check if volume_name in list_of_raids: will match if the logical disk also has no\n  volume_name (None)\n  3. Line 3133: After processing, if None remains in list_of_raids, the error is raised: \"Existing\n  Software RAID device detected that should not\"\n\n  This means any existing RAID device without a volume name will cause cleaning to fail when\n  skip_block_devices is configured with RAID volume names.\n\n  Issue 3: IndexError on Empty rd_name List\n\n  Location: ironic_python_agent/hardware.py:3112 and 3125\n\n  When trying to access rd_name[0], if no matching volume_name is found in volume_name_of_raid_devices,\n  the list comprehension returns an empty list, causing an IndexError:\n\n  rd_name \u003d [rd_name for rd_name, v_name in\n             volume_name_of_raid_devices.items()\n             if volume_name \u003d\u003d v_name]\n  if delete_raid_devices[rd_name[0]] !\u003d \u0027wipe\u0027 or ...  # IndexError if rd_name is empty\n\n\n  Summary of Failure Scenarios\n\n  1. IndexError at line 3082: When get_component_devices() returns empty list (corrupted RAID metadata)\n  2. SoftwareRAIDError at line 3133-3136: When existing RAID device has no volume_name\n  3. IndexError at lines 3112, 3125: When no matching volume_name found in dictionary\n\n  All these cases can be triggered by modifying RAID metadata on disk to either:\n  - Corrupt it partially (Issue 1)\n  - Remove volume names from metadata (Issues 2, 3)\n\n\n  The common thread is that the code assumes RAID devices will always have valid metadata with volume names when skip_block_devices is configured, but this assumption can be violated through disk corruption or manual metadata modification.","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be28a8bc24024718e44ffd4f0c0af50224cd81a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a787d2eb_2ce32136","updated":"2025-09-08 15:26:28.000000000","message":"Sorry, it will be a very annoying comment, but could you split your code into more functions and potentially move these to raid_utils? These functions are already very hard to navigate.","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"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"},"change_message_id":"d0af42ff38a84d7f164c94f76dcaf7531f45d4a0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"21180d78_bd49928a","updated":"2025-09-08 16:18:42.000000000","message":"Two concerns:\n- A root user on a machine, prior to cleaning, can kill the logical name of a raid device and prevent cleaning -- but I can\u0027t quite wrap my mind around if this is a new security risk, or an existing one\n- Existing users of this feature are seemingly getting their backwards compatibility broken, right? The change to the docs certainly implies this.","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"5152fa6ef77e1ab2b75a585946b97a88f5719cd8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b9b3a6e7_eb67135b","in_reply_to":"21180d78_bd49928a","updated":"2025-09-08 16:38:29.000000000","message":"I will just add a point to the second comment. This is a bug fix, and therefore, I do not think we break any backwards compatibility as the RAID safeguards just did not work fully before","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1bba2a5f28934a89528b451a032b15c120b073ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"cb3f5130_ae031a09","in_reply_to":"5fb5737d_b064a5a3","updated":"2025-09-10 15:03:56.000000000","message":"Refactored","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"72d3ab43158da2533e17ab619419a9c7f3091a83","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5fb5737d_b064a5a3","in_reply_to":"a787d2eb_2ce32136","updated":"2025-09-08 15:32:16.000000000","message":"That\u0027s a reasonable request. Will do","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1bba2a5f28934a89528b451a032b15c120b073ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"aec30f5f_83f63bc1","in_reply_to":"b9b3a6e7_eb67135b","updated":"2025-09-10 15:03:56.000000000","message":"For the first one - user would just cause the array to be cleaned. No failed cleaning, just data loss - exactly the same if the user removed the property","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"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"},"change_message_id":"6ff64792b88ba7b3baab9dd81ea3af9b1bbecd88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"cd8a9d6c_265911e1","updated":"2025-09-10 15:46:03.000000000","message":"08:41:01 \u003ckubajj\u003e JayF: we did test it on real nodes and it worked as expected as before the small refactor\n08:41:20 \u003ckubajj\u003e so probs can do after the move\n08:42:07 \u003ckubajj\u003e thanks\n08:42:36 \u003cJayF\u003e I\u0027ll tell you what, I\u0027ll drop down to a +1 for now until you confirm you tested this version on real hardware or add unit tests to increase your confidence :)\n08:44:32 \u003ckubajj\u003e JayF: we already tested it 😉\n08:45:01 \u003ckubajj\u003e (it worked the same as before the refactor, might have confused you with the wording)\n08:45:15 \u003cJayF\u003e oh, your statement was more \"worked as expected [same] as before the small refactor\" not \"worked as expected before the small refactor\"\n\nLanguage!","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc68bc77335d73ad68b9312d8b480e35fb78ae62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d7caceec_fec42a01","updated":"2025-09-15 14:43:32.000000000","message":"A few quick comments. None of them truly blocking. Not voting because I\u0027m not even close to groking the entire thing.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"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"},"change_message_id":"4fd1606ac996b20dbfa1ab9fd4147adff803ffe5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0a820820_9c385834","updated":"2025-09-10 15:43:17.000000000","message":"Jakub is gonna test this on real hardware and/or add more coverage","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"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"},"change_message_id":"2829e2187c048133f6484f595b1ac337ebbe2a1f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"56d75e1f_0a9e3f7e","updated":"2025-09-15 18:00:00.000000000","message":"Please address dtantsur\u0027s comments.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"ee0ca6dc31e2b629e1f90a925b45a9cabf53e4e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f7149856_bbbf1719","in_reply_to":"0a820820_9c385834","updated":"2025-09-17 13:49:46.000000000","message":"Done","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"ee0ca6dc31e2b629e1f90a925b45a9cabf53e4e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"15f98c61_8dfabd17","in_reply_to":"56d75e1f_0a9e3f7e","updated":"2025-09-17 13:49:46.000000000","message":"Done","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"f3a23f604883e6d2e7cc949c5f1b1fa2b15eefe2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"769d80c1_bda64bf6","updated":"2025-09-29 11:46:55.000000000","message":"recheck","commit_id":"d43913453b73a765961d3c5c4d0353e2a740cefb"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"230668e922946363b24ddaf7c82ea8e691fdf66e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"462d2df3_e45e8e24","updated":"2025-09-30 06:21:09.000000000","message":"recheck Failing pipeline removed","commit_id":"d43913453b73a765961d3c5c4d0353e2a740cefb"}],"ironic_python_agent/hardware.py":[{"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"},"change_message_id":"b49cc252082b4556d54ea4a9cd9797c7a17096fd","unresolved":true,"context_lines":[{"line_number":3079,"context_line":"            cause_of_not_deleting \u003d raid_skip_list_dict["},{"line_number":3080,"context_line":"                \u0027cause_of_not_deleting\u0027]"},{"line_number":3081,"context_line":"            for raid_device in raid_devices:"},{"line_number":3082,"context_line":"                device \u003d get_component_devices(raid_device.name)[0]"},{"line_number":3083,"context_line":"                try:"},{"line_number":3084,"context_line":"                    utils.execute(\u0027mdadm\u0027, \u0027--examine\u0027,"},{"line_number":3085,"context_line":"                                  device, use_standard_locale\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"6ad3afbd_bd07f48b","line":3082,"updated":"2025-09-08 17:38:33.000000000","message":"This will raise a valueerror in cases where there\u0027s no raid or metadata is invalud -- really any case where this list ends up with zero members.","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1bba2a5f28934a89528b451a032b15c120b073ca","unresolved":false,"context_lines":[{"line_number":3079,"context_line":"            cause_of_not_deleting \u003d raid_skip_list_dict["},{"line_number":3080,"context_line":"                \u0027cause_of_not_deleting\u0027]"},{"line_number":3081,"context_line":"            for raid_device in raid_devices:"},{"line_number":3082,"context_line":"                device \u003d get_component_devices(raid_device.name)[0]"},{"line_number":3083,"context_line":"                try:"},{"line_number":3084,"context_line":"                    utils.execute(\u0027mdadm\u0027, \u0027--examine\u0027,"},{"line_number":3085,"context_line":"                                  device, use_standard_locale\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"0b248937_6e86e225","line":3082,"in_reply_to":"6ad3afbd_bd07f48b","updated":"2025-09-10 15:03:56.000000000","message":"We refactored and now calculate list_of_raids from from volume_name_of_raid_devices\nWe are also being strict and raise an error if there is a volume name \u003d None","commit_id":"c80208a2a6a71c9a126d051f9a652c3141bf4766"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc68bc77335d73ad68b9312d8b480e35fb78ae62","unresolved":true,"context_lines":[{"line_number":1750,"context_line":"        return filter_devices(block_devices)"},{"line_number":1751,"context_line":""},{"line_number":1752,"context_line":"    def get_skip_list_from_node(self, node,"},{"line_number":1753,"context_line":"                                block_devices\u003dNone, just_raids\u003dFalse):"},{"line_number":1754,"context_line":"        properties \u003d node.get(\u0027properties\u0027, {})"},{"line_number":1755,"context_line":"        skip_list_hints \u003d properties.get(\"skip_block_devices\", [])"},{"line_number":1756,"context_line":"        if not skip_list_hints:"}],"source_content_type":"text/x-python","patch_set":7,"id":"270750f7_dfbc7da2","line":1753,"updated":"2025-09-15 14:43:32.000000000","message":"Late note: there is no reason for just_raids\u003dTrue not to be a different function. It\u0027s an entirely separate code path here.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1af2ed303a834c6197a656baa8b3162f3dc95051","unresolved":false,"context_lines":[{"line_number":1750,"context_line":"        return filter_devices(block_devices)"},{"line_number":1751,"context_line":""},{"line_number":1752,"context_line":"    def get_skip_list_from_node(self, node,"},{"line_number":1753,"context_line":"                                block_devices\u003dNone, just_raids\u003dFalse):"},{"line_number":1754,"context_line":"        properties \u003d node.get(\u0027properties\u0027, {})"},{"line_number":1755,"context_line":"        skip_list_hints \u003d properties.get(\"skip_block_devices\", [])"},{"line_number":1756,"context_line":"        if not skip_list_hints:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7e22fca5_669092ba","line":1753,"in_reply_to":"270750f7_dfbc7da2","updated":"2025-09-17 13:49:17.000000000","message":"Done","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc68bc77335d73ad68b9312d8b480e35fb78ae62","unresolved":true,"context_lines":[{"line_number":1796,"context_line":"        if raid_skip_list is not None:"},{"line_number":1797,"context_line":"            # Find all raid devices and remove anyone with \u0027keep\u0027"},{"line_number":1798,"context_line":"            # (and \u0027wipe\u0027 if include_wipe is true)"},{"line_number":1799,"context_line":"            raid_devices \u003d list_all_block_devices(block_type\u003d\u0027raid\u0027,"},{"line_number":1800,"context_line":"                                                  ignore_raid\u003dFalse,"},{"line_number":1801,"context_line":"                                                  ignore_empty\u003dFalse)"},{"line_number":1802,"context_line":"            raid_devices.extend("}],"source_content_type":"text/x-python","patch_set":7,"id":"66604ae2_1f97f704","line":1799,"updated":"2025-09-15 14:43:32.000000000","message":"We really REALLY need to update list_all_block_devices to accept several types. Or some constant to mean \"all RAID types\". Here we run the entire logic twice for basically no reason.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1af2ed303a834c6197a656baa8b3162f3dc95051","unresolved":false,"context_lines":[{"line_number":1796,"context_line":"        if raid_skip_list is not None:"},{"line_number":1797,"context_line":"            # Find all raid devices and remove anyone with \u0027keep\u0027"},{"line_number":1798,"context_line":"            # (and \u0027wipe\u0027 if include_wipe is true)"},{"line_number":1799,"context_line":"            raid_devices \u003d list_all_block_devices(block_type\u003d\u0027raid\u0027,"},{"line_number":1800,"context_line":"                                                  ignore_raid\u003dFalse,"},{"line_number":1801,"context_line":"                                                  ignore_empty\u003dFalse)"},{"line_number":1802,"context_line":"            raid_devices.extend("}],"source_content_type":"text/x-python","patch_set":7,"id":"cd91bf80_02d13a82","line":1799,"in_reply_to":"66604ae2_1f97f704","updated":"2025-09-17 13:49:17.000000000","message":"Done","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc68bc77335d73ad68b9312d8b480e35fb78ae62","unresolved":true,"context_lines":[{"line_number":2068,"context_line":"        \"\"\""},{"line_number":2069,"context_line":"        erase_errors \u003d {}"},{"line_number":2070,"context_line":"        info \u003d node.get(\u0027driver_internal_info\u0027, {})"},{"line_number":2071,"context_line":"        erasable_devices \u003d self._list_erasable_devices(node)"},{"line_number":2072,"context_line":"        if not erasable_devices:"},{"line_number":2073,"context_line":"            LOG.debug(\"No erasable devices have been found.\")"},{"line_number":2074,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":7,"id":"45a5b841_4fea8441","line":2071,"updated":"2025-09-15 14:43:32.000000000","message":"This should have been fixed separately since it\u0027s not RAID-specific.","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1af2ed303a834c6197a656baa8b3162f3dc95051","unresolved":false,"context_lines":[{"line_number":2068,"context_line":"        \"\"\""},{"line_number":2069,"context_line":"        erase_errors \u003d {}"},{"line_number":2070,"context_line":"        info \u003d node.get(\u0027driver_internal_info\u0027, {})"},{"line_number":2071,"context_line":"        erasable_devices \u003d self._list_erasable_devices(node)"},{"line_number":2072,"context_line":"        if not erasable_devices:"},{"line_number":2073,"context_line":"            LOG.debug(\"No erasable devices have been found.\")"},{"line_number":2074,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":7,"id":"b73445e8_9d26b821","line":2071,"in_reply_to":"45a5b841_4fea8441","updated":"2025-09-17 13:49:17.000000000","message":"Will change as a follow-up or a separate change then","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"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"},"change_message_id":"1f23336f92cb1eb510462cca6874331e03a1e216","unresolved":true,"context_lines":[{"line_number":2972,"context_line":"            self.delete_configuration(node, ports)"},{"line_number":2973,"context_line":"        return self._do_create_configuration(node, ports, raid_config)"},{"line_number":2974,"context_line":""},{"line_number":2975,"context_line":"    def _handle_raid_skip_list(self, raid_devices, skip_list):"},{"line_number":2976,"context_line":"        \u0027\u0027\u0027Handle the RAID skip list"},{"line_number":2977,"context_line":""},{"line_number":2978,"context_line":"        This function analyzes the existing RAID devices and the provided"}],"source_content_type":"text/x-python","patch_set":10,"id":"220826ee_1c186f39","line":2975,"updated":"2025-09-26 18:15:44.000000000","message":"ideally these _ methods related to raid would\u0027ve been moved to the raid_utils module during the refactor","commit_id":"d43913453b73a765961d3c5c4d0353e2a740cefb"},{"author":{"_account_id":38243,"name":"Morten Stephansen","display_name":"Morten Stephansen","email":"morten.kaastrup.stephansen@cern.ch","username":"mostepha"},"change_message_id":"905fef14a28c3f17a22dddef66ecba90e91a2241","unresolved":false,"context_lines":[{"line_number":2972,"context_line":"            self.delete_configuration(node, ports)"},{"line_number":2973,"context_line":"        return self._do_create_configuration(node, ports, raid_config)"},{"line_number":2974,"context_line":""},{"line_number":2975,"context_line":"    def _handle_raid_skip_list(self, raid_devices, skip_list):"},{"line_number":2976,"context_line":"        \u0027\u0027\u0027Handle the RAID skip list"},{"line_number":2977,"context_line":""},{"line_number":2978,"context_line":"        This function analyzes the existing RAID devices and the provided"}],"source_content_type":"text/x-python","patch_set":10,"id":"e31b7ce5_cfe892d5","line":2975,"in_reply_to":"220826ee_1c186f39","updated":"2025-09-29 11:55:01.000000000","message":"We agree. We tried moving this, when Dmitry pointed it out, but the scope of changes would make this patch unreviewable😞","commit_id":"d43913453b73a765961d3c5c4d0353e2a740cefb"}],"ironic_python_agent/raid_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc68bc77335d73ad68b9312d8b480e35fb78ae62","unresolved":true,"context_lines":[{"line_number":281,"context_line":"def get_volume_name_of_raid_device(raid_device, examine\u003dFalse):"},{"line_number":282,"context_line":"    \"\"\"Get the volume name of a RAID device"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    :param raid_device: A Software RAID block device name."},{"line_number":285,"context_line":"    :returns: volume name of the device, or None"},{"line_number":286,"context_line":"    \"\"\""},{"line_number":287,"context_line":"    if not raid_device:"}],"source_content_type":"text/x-python","patch_set":7,"id":"58bc7f96_8c1963fe","line":284,"updated":"2025-09-15 14:43:32.000000000","message":"Undocumented parameter \"examine\"","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"1af2ed303a834c6197a656baa8b3162f3dc95051","unresolved":false,"context_lines":[{"line_number":281,"context_line":"def get_volume_name_of_raid_device(raid_device, examine\u003dFalse):"},{"line_number":282,"context_line":"    \"\"\"Get the volume name of a RAID device"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    :param raid_device: A Software RAID block device name."},{"line_number":285,"context_line":"    :returns: volume name of the device, or None"},{"line_number":286,"context_line":"    \"\"\""},{"line_number":287,"context_line":"    if not raid_device:"}],"source_content_type":"text/x-python","patch_set":7,"id":"cbf67c97_a25c4b4c","line":284,"in_reply_to":"58bc7f96_8c1963fe","updated":"2025-09-17 13:49:17.000000000","message":"Done","commit_id":"56041bb6194924adcd20c784d4d2167aa292d57f"}]}
