)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c436d3c8602a5040e2c2a305c4dd0180b94bedec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c04fa9da_9d31e1cf","updated":"2023-11-30 16:33:49.000000000","message":"Revision required, for the power off case.","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"62e9599e5ce702f51e8c78e994fddabad40c516e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8b4fc332_b0c00dd6","updated":"2024-01-17 15:37:11.000000000","message":"recheck fedora mirror cert expired, appears to be good now","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8aee3213792322b1a6041911cc0e8915d019eb2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"248b83b1_d3529f11","updated":"2024-03-05 12:04:00.000000000","message":"Do you want to have a release note here? Especially if you plan on backporting this change (but also because it\u0027s quite user-visible).","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"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":"9d2207199965cf2028be485af6f6be8979a96872","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fa0c7d60_fd876c0b","updated":"2024-01-26 23:04:04.000000000","message":"My concern is resolved, did the adjustments to test_utils cover this case or would we need a new test?","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"90a3c1297efb324b1de699e55ea9858ddfb08d19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"016b4e92_70856f4b","in_reply_to":"fa0c7d60_fd876c0b","updated":"2024-01-29 16:42:20.000000000","message":"I adjusted the existing failure case test to check for it.","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"8b7e379aa6ad03f0eb153499490ab54a01da3e48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2d6dd063_fbfb064f","updated":"2024-06-06 13:45:29.000000000","message":"I will likely take another look later. Based on a glance view.","commit_id":"51731cf39af9b2b124e1c232ac8d9bc0fecede1f"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"52aadc002d7ff3aef649a7c1cde9f17caed8eda1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ac1755be_511ca31e","updated":"2024-11-07 02:32:43.000000000","message":"Just a question on the locking.","commit_id":"eee71819671e3c8384f9b852643d1de7713597cc"},{"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":"63d04e0196d226e7819c5acbf62d84889ef44917","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"4cf96000_849040f9","updated":"2024-10-31 17:29:23.000000000","message":"recheck metal3 integration failure, no logs","commit_id":"eee71819671e3c8384f9b852643d1de7713597cc"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"f04a8726bd6021aecbca02058e7f26af10995031","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"38a320a1_088982ca","updated":"2024-12-19 13:23:56.000000000","message":"recheck\nironic-grenade is failing with: \u0027Cannot open network namespace \"qrouter-011e8e93-64b8-4b71-894e-45694b6dfeea\": No such file or directory\u0027, which looks unrelated, perhaps transient","commit_id":"f53ccb647f2e11c0d24581d97168039af0b5da22"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"ca260bd9915a43a20b4b679a8e9e1e9d42f29319","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"61c80776_fcec5bd2","updated":"2024-11-22 13:42:03.000000000","message":"recheck reverted back to previously working","commit_id":"f53ccb647f2e11c0d24581d97168039af0b5da22"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"1e7aee86494fa336bcdc17d636f7ce8806d22393","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"aa807b15_e41343dd","updated":"2024-12-05 22:33:52.000000000","message":"recheck this was a previously working patch","commit_id":"f53ccb647f2e11c0d24581d97168039af0b5da22"}],"doc/source/admin/cleaning.rst":[{"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":"f772b7ef3f232659e93827f01d1cb16a8b129098","unresolved":true,"context_lines":[{"line_number":464,"context_line":"Similarly to the case of a \"power on\" request for a child node, when power"},{"line_number":465,"context_line":"is requested to be turned off for a \"parent node\", Ironic will issue"},{"line_number":466,"context_line":"\"power off\" commands for all child nodes unless the child node has the"},{"line_number":467,"context_line":"``has_dedicatd_power_supply`` option set in the node\u0027s ``driver_info`` field."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"Troubleshooting"},{"line_number":470,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ccf1c69b_ac81b8b6","line":467,"updated":"2024-01-05 21:12:39.000000000","message":"dedicated (spelling)","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f02ff5672105e1daf7bce25f5404fbb8838caca4","unresolved":false,"context_lines":[{"line_number":464,"context_line":"Similarly to the case of a \"power on\" request for a child node, when power"},{"line_number":465,"context_line":"is requested to be turned off for a \"parent node\", Ironic will issue"},{"line_number":466,"context_line":"\"power off\" commands for all child nodes unless the child node has the"},{"line_number":467,"context_line":"``has_dedicatd_power_supply`` option set in the node\u0027s ``driver_info`` field."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"Troubleshooting"},{"line_number":470,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"21e3d4a4_3668d280","line":467,"in_reply_to":"ccf1c69b_ac81b8b6","updated":"2024-01-16 23:43:26.000000000","message":"Done","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"}],"doc/source/admin/steps.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e3569362cb2958fe85f6737320dc2a364b918a07","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   Ironic will attempt to ensure power is active for a ``parent_node`` when"},{"line_number":125,"context_line":"   powering on a child node. Ironic takes no other power action, such as"},{"line_number":126,"context_line":"   powering down the ``parent_node`` as doing so would be impossible"},{"line_number":127,"context_line":"   to know if doing so can be done safely without impacting a workload."}],"source_content_type":"text/x-rst","patch_set":2,"id":"57db7544_386ddb7a","line":127,"updated":"2023-10-11 16:08:45.000000000","message":"What about powering it off if the parent node is powered off? If it says on, but the actual hardware goes down, we will try to enforce the current state (i.e. On), which will cause the parent node to be powered back on.","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fcc1e0b631af882f894b25042a2647b408fe9538","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   Ironic will attempt to ensure power is active for a ``parent_node`` when"},{"line_number":125,"context_line":"   powering on a child node. Ironic takes no other power action, such as"},{"line_number":126,"context_line":"   powering down the ``parent_node`` as doing so would be impossible"},{"line_number":127,"context_line":"   to know if doing so can be done safely without impacting a workload."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7c09ca9c_e4fbe6e7","line":127,"in_reply_to":"57db7544_386ddb7a","updated":"2023-11-30 16:05:13.000000000","message":"That is a super good question, we would try to return the device to the state requested, and attempt to power it back on which requires the aggregate state to be on. We could just lock that out, but then child nodes are \"lesser nodes\".\n\nThe whole *other* issue, which we might not be able to predict/manage is there may be vendor standardization to turn the chassis power on when a  DPU power on is requested. It is sort of a \"wild west\" of integrations because vendors don\u0027t seem to really want to standardize that much beyond their direct supported/customer requested cases.","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c436d3c8602a5040e2c2a305c4dd0180b94bedec","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   Ironic will attempt to ensure power is active for a ``parent_node`` when"},{"line_number":125,"context_line":"   powering on a child node. Ironic takes no other power action, such as"},{"line_number":126,"context_line":"   powering down the ``parent_node`` as doing so would be impossible"},{"line_number":127,"context_line":"   to know if doing so can be done safely without impacting a workload."}],"source_content_type":"text/x-rst","patch_set":2,"id":"c01e2320_68ecf3f2","line":127,"in_reply_to":"7c09ca9c_e4fbe6e7","updated":"2023-11-30 16:33:49.000000000","message":"Discussed this thorugh in IRC, we\u0027re going to iterate through and power down DPUs as well, that way we explicitly cover the case of manual power actions, and don\u0027t create weird power state change loops.","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"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":"f772b7ef3f232659e93827f01d1cb16a8b129098","unresolved":true,"context_lines":[{"line_number":107,"context_line":"You always want to ensure you\u0027ve set the environment appropriately for"},{"line_number":108,"context_line":"your next action."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"For example, if you are  executing steps against a parent node, which then"},{"line_number":111,"context_line":"execute against a child node via the ``execute_on_child_nodes`` step option,"},{"line_number":112,"context_line":"and it requires power to be on, you will want to explicitly"},{"line_number":113,"context_line":"ensure the power is on for the parent node **unless** the child node can"}],"source_content_type":"text/x-rst","patch_set":4,"id":"6a0760c7_e957841e","line":110,"updated":"2024-01-05 21:12:39.000000000","message":"nit: two spaces between \"are\" and \"executing\"","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f02ff5672105e1daf7bce25f5404fbb8838caca4","unresolved":false,"context_lines":[{"line_number":107,"context_line":"You always want to ensure you\u0027ve set the environment appropriately for"},{"line_number":108,"context_line":"your next action."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"For example, if you are  executing steps against a parent node, which then"},{"line_number":111,"context_line":"execute against a child node via the ``execute_on_child_nodes`` step option,"},{"line_number":112,"context_line":"and it requires power to be on, you will want to explicitly"},{"line_number":113,"context_line":"ensure the power is on for the parent node **unless** the child node can"}],"source_content_type":"text/x-rst","patch_set":4,"id":"57102cad_3558750b","line":110,"in_reply_to":"6a0760c7_e957841e","updated":"2024-01-16 23:43:26.000000000","message":"Done","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"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":"f772b7ef3f232659e93827f01d1cb16a8b129098","unresolved":true,"context_lines":[{"line_number":116,"context_line":"case because Ironic has guarding logic internally to attempt to power-on the"},{"line_number":117,"context_line":"parent node, but it cannot be an after thought due to internal task locking."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Power specifically aside, the general principal applies to the execution"},{"line_number":120,"context_line":"of all steps. You need always want to build upon the prior step or existing"},{"line_number":121,"context_line":"existing known state of the system."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bac514cc_7c75ffa7","line":119,"updated":"2024-01-05 21:12:39.000000000","message":"nit: principle","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f02ff5672105e1daf7bce25f5404fbb8838caca4","unresolved":false,"context_lines":[{"line_number":116,"context_line":"case because Ironic has guarding logic internally to attempt to power-on the"},{"line_number":117,"context_line":"parent node, but it cannot be an after thought due to internal task locking."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Power specifically aside, the general principal applies to the execution"},{"line_number":120,"context_line":"of all steps. You need always want to build upon the prior step or existing"},{"line_number":121,"context_line":"existing known state of the system."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"aed9e1d4_71a8eea7","line":119,"in_reply_to":"bac514cc_7c75ffa7","updated":"2024-01-16 23:43:26.000000000","message":"Done","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8aee3213792322b1a6041911cc0e8915d019eb2","unresolved":true,"context_lines":[{"line_number":103,"context_line":"Set the environment"},{"line_number":104,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"When using steps with the functionality to execute on child nodes,"},{"line_number":107,"context_line":"You always want to ensure you\u0027ve set the environment appropriately for"},{"line_number":108,"context_line":"your next action."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"297a15cc_8048e276","line":106,"updated":"2024-03-05 12:04:00.000000000","message":"nit: add some reference for \"child nodes\", otherwise it\u0027s out of context in this file.","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ca6a2120e09a408d189d69bc3cd109f9d5be65c7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"Set the environment"},{"line_number":104,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"When using steps with the functionality to execute on child nodes,"},{"line_number":107,"context_line":"You always want to ensure you\u0027ve set the environment appropriately for"},{"line_number":108,"context_line":"your next action."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dbccc1c5_3482d706","line":106,"in_reply_to":"297a15cc_8048e276","updated":"2024-11-07 16:20:33.000000000","message":"Done","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8aee3213792322b1a6041911cc0e8915d019eb2","unresolved":true,"context_lines":[{"line_number":112,"context_line":"and it requires power to be on, you will want to explicitly"},{"line_number":113,"context_line":"ensure the power is on for the parent node **unless** the child node can"},{"line_number":114,"context_line":"operate independently, as signaled through the driver_info option"},{"line_number":115,"context_line":"``has_dedicated_power_supply`` on the child node. Power is an obvious"},{"line_number":116,"context_line":"case because Ironic has guarding logic internally to attempt to power-on the"},{"line_number":117,"context_line":"parent node, but it cannot be an after thought due to internal task locking."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"29b32b53_40bf105d","line":115,"updated":"2024-03-05 12:04:00.000000000","message":"nit: could use a CLI example","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8aee3213792322b1a6041911cc0e8915d019eb2","unresolved":true,"context_lines":[{"line_number":121,"context_line":"existing known state of the system."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":".. NOTE::"},{"line_number":124,"context_line":"   Ironic will attempt to ensure power is active for a ``parent_node`` when"},{"line_number":125,"context_line":"   powering on a child node. Conversely, Ironic will also attempt to power"},{"line_number":126,"context_line":"   down child nodes if a parent node is requested to be turned off, unless"},{"line_number":127,"context_line":"   the ``has_dedicated_power_supply`` option is set for the child node."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5825983b_4f8c10fc","line":124,"updated":"2024-03-05 12:04:00.000000000","message":"nit: it feels like we need a dedicate page for power operations. They\u0027re so basic we\u0027ve never thought about it.. but now we have some complexity.","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ca6a2120e09a408d189d69bc3cd109f9d5be65c7","unresolved":true,"context_lines":[{"line_number":121,"context_line":"existing known state of the system."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":".. NOTE::"},{"line_number":124,"context_line":"   Ironic will attempt to ensure power is active for a ``parent_node`` when"},{"line_number":125,"context_line":"   powering on a child node. Conversely, Ironic will also attempt to power"},{"line_number":126,"context_line":"   down child nodes if a parent node is requested to be turned off, unless"},{"line_number":127,"context_line":"   the ``has_dedicated_power_supply`` option is set for the child node."}],"source_content_type":"text/x-rst","patch_set":6,"id":"6b7c10d2_c8101663","line":124,"in_reply_to":"5825983b_4f8c10fc","updated":"2024-11-07 16:20:33.000000000","message":"Might be a good idea, I just don\u0027t have the time to do that at this point.","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"8b7e379aa6ad03f0eb153499490ab54a01da3e48","unresolved":true,"context_lines":[{"line_number":117,"context_line":"parent node, but it cannot be an after thought due to internal task locking."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Power specifically aside, the general principle applies to the execution"},{"line_number":120,"context_line":"of all steps. You need always want to build upon the prior step or existing"},{"line_number":121,"context_line":"existing known state of the system."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":".. NOTE::"},{"line_number":124,"context_line":"   Ironic will attempt to ensure power is active for a ``parent_node`` when"}],"source_content_type":"text/x-rst","patch_set":9,"id":"a4d93095_02f83c31","line":121,"range":{"start_line":120,"start_character":67,"end_line":121,"end_character":8},"updated":"2024-06-06 13:45:29.000000000","message":"niit: Duplicate.","commit_id":"51731cf39af9b2b124e1c232ac8d9bc0fecede1f"}],"ironic/conductor/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e3569362cb2958fe85f6737320dc2a364b918a07","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        # If we have a parent node defined for the device, we likely"},{"line_number":313,"context_line":"        # need to turn the power on."},{"line_number":314,"context_line":"        parent_power_needed \u003d not task.node.driver_info.get("},{"line_number":315,"context_line":"            \u0027device_has_dedicated_power_supply\u0027, False)"},{"line_number":316,"context_line":"    else:"},{"line_number":317,"context_line":"        parent_power_needed \u003d False"},{"line_number":318,"context_line":"    # Set the target_power_state and clear any last_error, if we\u0027re"}],"source_content_type":"text/x-python","patch_set":2,"id":"b58c4f64_dd5d6067","line":315,"updated":"2023-10-11 16:08:45.000000000","message":"nit: s/device_//","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e3569362cb2958fe85f6737320dc2a364b918a07","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                        shared\u003dTrue,"},{"line_number":345,"context_line":"                        purpose\u003d\u0027power parent node\u0027) as pn_task:"},{"line_number":346,"context_line":"                    if (pn_task.driver.power.get_power_state(pn_task)"},{"line_number":347,"context_line":"                            !\u003d states.POWER_ON):"},{"line_number":348,"context_line":"                        try:"},{"line_number":349,"context_line":"                            pn_task.upgrade_lock()"},{"line_number":350,"context_line":"                        except exception.NodeLocked as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"0fdc1498_c592d114","line":347,"updated":"2023-10-11 16:08:45.000000000","message":"Do we need to handle the case of a non-empty target_power_state?","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fcc1e0b631af882f894b25042a2647b408fe9538","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                        shared\u003dTrue,"},{"line_number":345,"context_line":"                        purpose\u003d\u0027power parent node\u0027) as pn_task:"},{"line_number":346,"context_line":"                    if (pn_task.driver.power.get_power_state(pn_task)"},{"line_number":347,"context_line":"                            !\u003d states.POWER_ON):"},{"line_number":348,"context_line":"                        try:"},{"line_number":349,"context_line":"                            pn_task.upgrade_lock()"},{"line_number":350,"context_line":"                        except exception.NodeLocked as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"f13cf65c_6ac69b08","line":347,"in_reply_to":"0fdc1498_c592d114","updated":"2023-11-30 16:05:13.000000000","message":"hmmmm.... as there is an in-flight operation on another conductor most likely.\n\nShouldn\u0027t the upgrade_lock fail then?  Then again, if it does, it might not be fatal overall.\n\nOr maybe it should be fatal, and stay fatal, and and just force the end user to re-request the power state to be changed. Thoughts?","commit_id":"1a0b9638ad5ccd90a7496a41074d6d29b1806368"},{"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":"f772b7ef3f232659e93827f01d1cb16a8b129098","unresolved":true,"context_lines":[{"line_number":433,"context_line":"            if (cn_task.driver.power.get_power_state(cn_task)"},{"line_number":434,"context_line":"                !\u003d states.POWER_OFF):"},{"line_number":435,"context_line":"                try:"},{"line_number":436,"context_line":"                    cn_task.upgrade_lock()"},{"line_number":437,"context_line":"                except exception.NodeLocked as e:"},{"line_number":438,"context_line":"                    LOG.error("},{"line_number":439,"context_line":"                        \u0027Cannot power off child node %(cn)s \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"b0059c3c_7b367f6a","line":436,"updated":"2024-01-05 21:12:39.000000000","message":"Here and for power on, I believe we need to:\n- Grab all locks, confirming we\u0027ll be able to complete the action\n*THEN*\n- Perform requested power actions\n- Power off\n\nOtherwise we\u0027re creating situations where we could be partially powering off some child nodes because one, later in the loop, is locked.","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f02ff5672105e1daf7bce25f5404fbb8838caca4","unresolved":true,"context_lines":[{"line_number":433,"context_line":"            if (cn_task.driver.power.get_power_state(cn_task)"},{"line_number":434,"context_line":"                !\u003d states.POWER_OFF):"},{"line_number":435,"context_line":"                try:"},{"line_number":436,"context_line":"                    cn_task.upgrade_lock()"},{"line_number":437,"context_line":"                except exception.NodeLocked as e:"},{"line_number":438,"context_line":"                    LOG.error("},{"line_number":439,"context_line":"                        \u0027Cannot power off child node %(cn)s \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"4c1158c9_94e0797f","line":436,"in_reply_to":"b0059c3c_7b367f6a","updated":"2024-01-16 23:43:26.000000000","message":"Hmmm, This is a very good point!\n\nI\u0027ve refactored this to keep the same basic flow but collect the tasks for the children which are on, and then act upon them.","commit_id":"88cb3f6457427eaa53951295ed05510db8390e04"},{"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":"60506810d89ca00360c73eeb35bc24e892eba652","unresolved":true,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"8d308f9f_2a559480","line":453,"updated":"2024-01-16 23:47:39.000000000","message":"Is this going to automatically do the cleanup of the locks we already successfully took?","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"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":"afad764eb4853b7921ddfc7ca254a3fd80a202e4","unresolved":true,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dbfa3c84_2ff3c71d","line":453,"in_reply_to":"8d308f9f_2a559480","updated":"2024-01-19 21:17:17.000000000","message":"Bump?","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3cb1ec719dec7c3dc6c34d4b1f40d3fcb24928e2","unresolved":true,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ca7e6c66_d2ffcf97","line":453,"in_reply_to":"92a23506_9a5ca204","updated":"2024-01-26 18:50:05.000000000","message":"oh my, no, and trying to do so breaks things horribly.","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ca6a2120e09a408d189d69bc3cd109f9d5be65c7","unresolved":false,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff20ab21_72336e72","line":453,"in_reply_to":"ca7e6c66_d2ffcf97","updated":"2024-11-07 16:20:33.000000000","message":"Done","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"52aadc002d7ff3aef649a7c1cde9f17caed8eda1","unresolved":true,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"56afd507_a4f664b7","line":453,"in_reply_to":"ca7e6c66_d2ffcf97","updated":"2024-11-07 02:32:43.000000000","message":"Is this resolved then?","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"55b17730831940d824826c214c315d9217f86257","unresolved":true,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"92a23506_9a5ca204","line":453,"in_reply_to":"dbfa3c84_2ff3c71d","updated":"2024-01-26 18:36:09.000000000","message":"locks get cleaned up on __exit__\u0027s call, which I believe should be triggered as everything gets unwound.  Actually, this is easy to test.","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"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":"83c22165e6294cddad289eecba6db92bc6d22dee","unresolved":false,"context_lines":[{"line_number":450,"context_line":"             \u0027node\u0027: task.node.uuid,"},{"line_number":451,"context_line":"             \u0027error\u0027: e})"},{"line_number":452,"context_line":"        raise exception.ChildNodeLocked("},{"line_number":453,"context_line":"            node\u003dtask.node.uuid, child\u003dcn_task.node.uuid)"},{"line_number":454,"context_line":"    for cn_task in cn_tasks:"},{"line_number":455,"context_line":"        node_power_action(cn_task, target_state, timeout)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"99081874_3626d003","line":453,"in_reply_to":"ff20ab21_72336e72","updated":"2024-11-07 16:28:53.000000000","message":"see the finally at ln 462","commit_id":"ae91274ea7978f9508ccd5a0ebcfc761484aa57f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8aee3213792322b1a6041911cc0e8915d019eb2","unresolved":true,"context_lines":[{"line_number":403,"context_line":"    with task_manager.acquire("},{"line_number":404,"context_line":"            task.context, task.node.parent_node,"},{"line_number":405,"context_line":"            shared\u003dTrue,"},{"line_number":406,"context_line":"            purpose\u003d\u0027power parent node\u0027) as pn_task:"},{"line_number":407,"context_line":"        if (pn_task.driver.power.get_power_state(pn_task)"},{"line_number":408,"context_line":"                !\u003d states.POWER_ON):"},{"line_number":409,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fd66340_2a7ed377","line":406,"updated":"2024-03-05 12:04:00.000000000","message":"nit: \"power on parent node\"","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ca6a2120e09a408d189d69bc3cd109f9d5be65c7","unresolved":false,"context_lines":[{"line_number":403,"context_line":"    with task_manager.acquire("},{"line_number":404,"context_line":"            task.context, task.node.parent_node,"},{"line_number":405,"context_line":"            shared\u003dTrue,"},{"line_number":406,"context_line":"            purpose\u003d\u0027power parent node\u0027) as pn_task:"},{"line_number":407,"context_line":"        if (pn_task.driver.power.get_power_state(pn_task)"},{"line_number":408,"context_line":"                !\u003d states.POWER_ON):"},{"line_number":409,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"c21f0eb9_3baef669","line":406,"in_reply_to":"3fd66340_2a7ed377","updated":"2024-11-07 16:20:33.000000000","message":"Done","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"52aadc002d7ff3aef649a7c1cde9f17caed8eda1","unresolved":true,"context_lines":[{"line_number":439,"context_line":"            # the list of locks to act upon."},{"line_number":440,"context_line":"            cn_task \u003d task_manager.acquire("},{"line_number":441,"context_line":"                task.context, child, shared\u003dTrue,"},{"line_number":442,"context_line":"                purpose\u003d\u0027child node power off\u0027)"},{"line_number":443,"context_line":"            if (cn_task.driver.power.get_power_state(cn_task)"},{"line_number":444,"context_line":"                !\u003d states.POWER_OFF):"},{"line_number":445,"context_line":"                cn_task.upgrade_lock()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5de72116_c3aea283","line":442,"updated":"2024-11-07 02:32:43.000000000","message":"So you acquire here but only append after the attempted upgrade_lock() below. Does this need to get cleaned up as well? Should we make the list of cn_tasks first then upgrade_lock() and perform the action?","commit_id":"eee71819671e3c8384f9b852643d1de7713597cc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ca6a2120e09a408d189d69bc3cd109f9d5be65c7","unresolved":true,"context_lines":[{"line_number":439,"context_line":"            # the list of locks to act upon."},{"line_number":440,"context_line":"            cn_task \u003d task_manager.acquire("},{"line_number":441,"context_line":"                task.context, child, shared\u003dTrue,"},{"line_number":442,"context_line":"                purpose\u003d\u0027child node power off\u0027)"},{"line_number":443,"context_line":"            if (cn_task.driver.power.get_power_state(cn_task)"},{"line_number":444,"context_line":"                !\u003d states.POWER_OFF):"},{"line_number":445,"context_line":"                cn_task.upgrade_lock()"}],"source_content_type":"text/x-python","patch_set":10,"id":"e2984971_ac68f15a","line":442,"in_reply_to":"5de72116_c3aea283","updated":"2024-11-07 16:20:33.000000000","message":"It means only a task has been created, but doesn\u0027t hold an exclusive lock. So when we actually go to upgrade the lock to hold it exclusively, then only *that* needs to be handled. If there is an issue, they can just be deleted through the GC process. Even then, the finally block further down always executes and calls release_resources to handle locked nodes.","commit_id":"eee71819671e3c8384f9b852643d1de7713597cc"},{"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":"2514cb6ee3cbec51ec97728846cbcaff88c0fb84","unresolved":true,"context_lines":[{"line_number":441,"context_line":"            task_manager.acquire("},{"line_number":442,"context_line":"                task.context, child, shared\u003dTrue,"},{"line_number":443,"context_line":"                purpose\u003d\u0027child node power off\u0027)"},{"line_number":444,"context_line":"            for child in child_nodes]"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # now check the status and upgrade the lock if needed"},{"line_number":447,"context_line":"        # and take the action"}],"source_content_type":"text/x-python","patch_set":11,"id":"462f0060_c56cdfaf","line":444,"updated":"2024-11-11 18:47:01.000000000","message":"@cardoe I\u0027m not sure this is an improvement? We\u0027re now pulling *all* the locks at once before doing any power actions. This is less efficient, and I can\u0027t find how the old code was broken (it would, in finally, unlock all the upgraded locks)","commit_id":"79d17457d9e951d1a98c1fe53208c424fe7039c5"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"d2393cc99711dc9d0ecc92657ab82bc63ecc72dd","unresolved":true,"context_lines":[{"line_number":441,"context_line":"            task_manager.acquire("},{"line_number":442,"context_line":"                task.context, child, shared\u003dTrue,"},{"line_number":443,"context_line":"                purpose\u003d\u0027child node power off\u0027)"},{"line_number":444,"context_line":"            for child in child_nodes]"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # now check the status and upgrade the lock if needed"},{"line_number":447,"context_line":"        # and take the action"}],"source_content_type":"text/x-python","patch_set":11,"id":"98bbdcfd_b59c1ac6","line":444,"in_reply_to":"462f0060_c56cdfaf","updated":"2024-11-11 20:10:33.000000000","message":"We can revert this. My question on patch set 10 was that all the locks are grabbed as a shared lock and then only added to the list of locks to be released if an exclusive lock was grabbed. but in other places shared locks need to be released as well per the comments. so do we need to add them to a list first to be released when we grab the shared locks and I thought Julia said yes.","commit_id":"79d17457d9e951d1a98c1fe53208c424fe7039c5"},{"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":"bde5490cef0c80c1894c0303acb337274d055f85","unresolved":true,"context_lines":[{"line_number":441,"context_line":"            task_manager.acquire("},{"line_number":442,"context_line":"                task.context, child, shared\u003dTrue,"},{"line_number":443,"context_line":"                purpose\u003d\u0027child node power off\u0027)"},{"line_number":444,"context_line":"            for child in child_nodes]"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # now check the status and upgrade the lock if needed"},{"line_number":447,"context_line":"        # and take the action"}],"source_content_type":"text/x-python","patch_set":11,"id":"84c88f10_1e2e7def","line":444,"in_reply_to":"98bbdcfd_b59c1ac6","updated":"2024-11-11 21:06:19.000000000","message":"There\u0027s clearly something I don\u0027t understand here (yet). AFAICT, there\u0027s just node.reservation which kinda means only an exclusive lock is a \u0027real\u0027 lock... right?","commit_id":"79d17457d9e951d1a98c1fe53208c424fe7039c5"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8aee3213792322b1a6041911cc0e8915d019eb2","unresolved":true,"context_lines":[{"line_number":2908,"context_line":"            ).where(models.Node.parent_node \u003d\u003d node_uuid)).all()"},{"line_number":2909,"context_line":"            for r in res:"},{"line_number":2910,"context_line":"                if (exclude_dedicated_power"},{"line_number":2911,"context_line":"                    and r[1].get(\u0027has_dedicated_power_supply\u0027)):"},{"line_number":2912,"context_line":"                    continue"},{"line_number":2913,"context_line":"                nodes.append(r[0])"},{"line_number":2914,"context_line":"            return nodes"}],"source_content_type":"text/x-python","patch_set":6,"id":"4f13d469_ace30d88","line":2911,"updated":"2024-03-05 12:04:00.000000000","message":"nit: we don\u0027t tend to add such logic to the database layer, I believe. Simply because doing it here does not add particular benefits over the caller.","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ca6a2120e09a408d189d69bc3cd109f9d5be65c7","unresolved":true,"context_lines":[{"line_number":2908,"context_line":"            ).where(models.Node.parent_node \u003d\u003d node_uuid)).all()"},{"line_number":2909,"context_line":"            for r in res:"},{"line_number":2910,"context_line":"                if (exclude_dedicated_power"},{"line_number":2911,"context_line":"                    and r[1].get(\u0027has_dedicated_power_supply\u0027)):"},{"line_number":2912,"context_line":"                    continue"},{"line_number":2913,"context_line":"                nodes.append(r[0])"},{"line_number":2914,"context_line":"            return nodes"}],"source_content_type":"text/x-python","patch_set":6,"id":"3681a015_3a14965d","line":2911,"in_reply_to":"4f13d469_ace30d88","updated":"2024-11-07 16:20:33.000000000","message":"I\u0027m adding a note to this effect. A human with spoons can refactor it if they want.","commit_id":"673b2a0c3446ad0ba10258286828b47bcd56b982"}]}
