)]}'
{"/PATCHSET_LEVEL":[{"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":"29e0ce646d60df44479fc567dc350ede31128511","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2b58fd12_466156aa","updated":"2025-06-17 18:58:43.000000000","message":"Jun 16 19:43:16.358830 np0041142493 ironic-conductor[75536]: DEBUG ironic.conductor.steps [None req-773a41c7-b2a5-4711-bf7b-4fba3ae9e562 None None] List of the deploy steps for node 7aeea80d-6cd9-46f4-83f7-707e76a40417: [{\u0027step\u0027: \u0027deploy\u0027, \u0027priority\u0027: 100, \u0027argsinfo\u0027: None, \u0027interface\u0027: \u0027deploy\u0027}] {{(pid\u003d75536) set_node_deployment_steps /opt/stack/ironic/ironic/conductor/steps.py:478}}\nJun 16 19:43:16.394889 np0041142493 ironic-conductor[75536]: INFO ironic.conductor.utils [None req-773a41c7-b2a5-4711-bf7b-4fba3ae9e562 None None] Node 7aeea80d-6cd9-46f4-83f7-707e76a40417: Starting deployment with steps\u003d[{\u0027step\u0027: \u0027deploy\u0027, \u0027priority\u0027: 100, \u0027argsinfo\u0027: None, \u0027interface\u0027: \u0027deploy\u0027}]\n\n^^\n\nIt looks like, at least for deployment steps, we\u0027re duplicating an already-existing debug-level log. I don\u0027t see a need to keep logging these twice in DEBUG?","commit_id":"df7d02090346fe201704fe5c0731053b7e6b2ef1"},{"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":"e9cabe49e139d8106f763fe08bd26aa1ab449971","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"367aa626_97408d41","updated":"2025-06-18 18:09:45.000000000","message":"https://opendev.org/openstack/ironic/src/branch/master/ironic/conductor/steps.py#L336 is where it logs in debug mode. I am OK if that code remains as-is (you have to opt in to both debug logs and step logging to get doubles) or potentially guard this code to only send as debug if the new CONF option is set to not log.","commit_id":"df7d02090346fe201704fe5c0731053b7e6b2ef1"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"54bbd087b6314fda360bdda095bb76de7982cf94","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ae0df61a_1db20428","updated":"2025-06-24 21:42:39.000000000","message":"Overall seems fine, but would really like to see a test around sanitization at least.","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"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":"fe82c8828f7affd0e6a5eecab60a9f1d62a91630","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"68012b34_83f59a2a","updated":"2025-06-27 16:22:27.000000000","message":"This change may need documentation updates, I just do not know where (yet).","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"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":"f8526182620012d0ed92f955aafedb14da856cea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2046859d_b025467b","updated":"2025-06-19 10:51:24.000000000","message":"recheck - POST_FAILURE","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f0661ac7fba283d786d28292a6cabc0d9ace464","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"851d69eb_39786fb2","in_reply_to":"68012b34_83f59a2a","updated":"2025-07-29 13:42:28.000000000","message":"That is fine, normally we might note such in the admin docs, but this is also more a record data feature which is enabled by default. I\u0027d honestly not really worry about it beyond the release note in the short term.","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"}],"ironic/conductor/cleaning.py":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"54bbd087b6314fda360bdda095bb76de7982cf94","unresolved":true,"context_lines":[{"line_number":238,"context_line":"                task.process_event(\u0027wait\u0027, target_state\u003dtarget_state)"},{"line_number":239,"context_line":"                return"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"            clean_type \u003d \"manual\" if manual_clean else \"automated\""},{"line_number":242,"context_line":"            utils.log_step_flow_history("},{"line_number":243,"context_line":"                node\u003dnode, event_type\u003dclean_type,"},{"line_number":244,"context_line":"                steps\u003dnode.driver_internal_info.get(\"clean_steps\", []),"}],"source_content_type":"text/x-python","patch_set":8,"id":"a842e16a_9bc08803","line":241,"updated":"2025-06-24 21:42:39.000000000","message":"Feels like clean_type could be returned by a method or function along the lines of `def clean_type(node) -\u003e string`. \n\nAlso `manual` and `automated` strings could be put behind constants.\n\nEspecially since they seem to be a part of a broader `event_type` category.","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"}],"ironic/conductor/deployments.py":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"54bbd087b6314fda360bdda095bb76de7982cf94","unresolved":true,"context_lines":[{"line_number":304,"context_line":"        node.save()"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    utils.log_step_flow_history("},{"line_number":307,"context_line":"        node\u003dnode, event_type\u003d\"deployment\","},{"line_number":308,"context_line":"        steps\u003dnode.driver_internal_info.get(\"deploy_steps\", []),"},{"line_number":309,"context_line":"        status\u003d\"start\","},{"line_number":310,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"49286e14_ee8b933f","line":307,"updated":"2025-06-24 21:42:39.000000000","message":"Maybe an enum for `event_type`?","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"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":"0d2b4cec9df5910f8bc7c7bc0efbfa4028ac26b1","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        node.save()"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    utils.log_step_flow_history("},{"line_number":307,"context_line":"        node\u003dnode, event_type\u003d\"deployment\","},{"line_number":308,"context_line":"        steps\u003dnode.driver_internal_info.get(\"deploy_steps\", []),"},{"line_number":309,"context_line":"        status\u003d\"start\","},{"line_number":310,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"0a53e5f3_0d6d3c57","line":307,"in_reply_to":"49286e14_ee8b933f","updated":"2025-06-27 16:26:21.000000000","message":"Acknowledged","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"}],"ironic/conductor/utils.py":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"54bbd087b6314fda360bdda095bb76de7982cf94","unresolved":true,"context_lines":[{"line_number":2023,"context_line":"            or CONF.conductor.log_step_flows_to_syslog):"},{"line_number":2024,"context_line":"        return"},{"line_number":2025,"context_line":""},{"line_number":2026,"context_line":"    sanitized \u003d ["},{"line_number":2027,"context_line":"        ("},{"line_number":2028,"context_line":"            dict(st, args\u003dstrutils.mask_dict_password(st[\"args\"]))"},{"line_number":2029,"context_line":"            if isinstance(st, dict) and isinstance(st.get(\"args\"), dict)"}],"source_content_type":"text/x-python","patch_set":8,"id":"4ea73f8d_1be31e09","line":2026,"updated":"2025-06-24 21:42:39.000000000","message":"Is there a unit test that verifies we\u0027re sanitizing things we expect to be sanitized?","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"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":"fe82c8828f7affd0e6a5eecab60a9f1d62a91630","unresolved":false,"context_lines":[{"line_number":2023,"context_line":"            or CONF.conductor.log_step_flows_to_syslog):"},{"line_number":2024,"context_line":"        return"},{"line_number":2025,"context_line":""},{"line_number":2026,"context_line":"    sanitized \u003d ["},{"line_number":2027,"context_line":"        ("},{"line_number":2028,"context_line":"            dict(st, args\u003dstrutils.mask_dict_password(st[\"args\"]))"},{"line_number":2029,"context_line":"            if isinstance(st, dict) and isinstance(st.get(\"args\"), dict)"}],"source_content_type":"text/x-python","patch_set":8,"id":"e6ed5f8a_4fef6294","line":2026,"in_reply_to":"4ea73f8d_1be31e09","updated":"2025-06-27 16:22:27.000000000","message":"Acknowledged","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"}],"ironic/conf/conductor.py":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"54bbd087b6314fda360bdda095bb76de7982cf94","unresolved":true,"context_lines":[{"line_number":639,"context_line":"        help\u003d("},{"line_number":640,"context_line":"            \"When True, the conductor writes a Node History entry at the \""},{"line_number":641,"context_line":"            \"start and end of every cleaning/servicing/deploy-steps flow. \""},{"line_number":642,"context_line":"            \"Disable this in very high-churn environments to reduce DB load.\""},{"line_number":643,"context_line":"        )),"},{"line_number":644,"context_line":"    cfg.BoolOpt("},{"line_number":645,"context_line":"        \u0027log_step_flows_to_syslog\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"65019123_00c6e4e4","line":642,"updated":"2025-06-24 21:42:39.000000000","message":"Do you have a sense of how much extra load this produces?","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"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":"fe82c8828f7affd0e6a5eecab60a9f1d62a91630","unresolved":true,"context_lines":[{"line_number":639,"context_line":"        help\u003d("},{"line_number":640,"context_line":"            \"When True, the conductor writes a Node History entry at the \""},{"line_number":641,"context_line":"            \"start and end of every cleaning/servicing/deploy-steps flow. \""},{"line_number":642,"context_line":"            \"Disable this in very high-churn environments to reduce DB load.\""},{"line_number":643,"context_line":"        )),"},{"line_number":644,"context_line":"    cfg.BoolOpt("},{"line_number":645,"context_line":"        \u0027log_step_flows_to_syslog\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9598a8b1_5ba65a27","line":642,"in_reply_to":"65019123_00c6e4e4","updated":"2025-06-27 16:22:27.000000000","message":"So, it logs 2 events per flow (start and end), so around 4–6 additional DB writes per node during cleaning + deployment, [+ servicing]. However, since the content is small and we’re leveraging existing pruning logic, the impact should be minimal.","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f0661ac7fba283d786d28292a6cabc0d9ace464","unresolved":true,"context_lines":[{"line_number":639,"context_line":"        help\u003d("},{"line_number":640,"context_line":"            \"When True, the conductor writes a Node History entry at the \""},{"line_number":641,"context_line":"            \"start and end of every cleaning/servicing/deploy-steps flow. \""},{"line_number":642,"context_line":"            \"Disable this in very high-churn environments to reduce DB load.\""},{"line_number":643,"context_line":"        )),"},{"line_number":644,"context_line":"    cfg.BoolOpt("},{"line_number":645,"context_line":"        \u0027log_step_flows_to_syslog\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"4cd0ff1d_b6f14f27","line":642,"in_reply_to":"9598a8b1_5ba65a27","updated":"2025-07-29 13:42:28.000000000","message":"I concur, it should be minimal and realistically is a good audit of what is going on since a user cannot delete records from node history. They are also stored as text if memory serves and a separate table to minimize contention/impact to normal operation of the nodes table itself.","commit_id":"30c1cb310468bb6272c8be6869b7607bd881f9a6"}],"zuul.d/ironic-jobs.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"817b3e2dea05b2e92e42bf59f14f442dcfd0cfce","unresolved":true,"context_lines":[{"line_number":741,"context_line":"        IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True"},{"line_number":742,"context_line":"        IRONIC_VM_EPHEMERAL_DISK: 0"},{"line_number":743,"context_line":"        IRONIC_RPC_TRANSPORT: json-rpc"},{"line_number":744,"context_line":"        IRONIC_LOG_STEPS_TO_SYSLOG: True"},{"line_number":745,"context_line":"      devstack_services:"},{"line_number":746,"context_line":"        atop: True"},{"line_number":747,"context_line":"        rabbit: True"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"235d3a2c_68c3827b","line":744,"updated":"2025-06-16 18:42:20.000000000","message":"Likely worhtwhile just setting on ironic-base. Not everything uses ironic-base, so it becomes a decent matrix.","commit_id":"3fa3d1987073ec522d58a51e996b1427034ce716"},{"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":"8c6fea9ae6389d67b3c667ad9bbb72aca9764854","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True"},{"line_number":742,"context_line":"        IRONIC_VM_EPHEMERAL_DISK: 0"},{"line_number":743,"context_line":"        IRONIC_RPC_TRANSPORT: json-rpc"},{"line_number":744,"context_line":"        IRONIC_LOG_STEPS_TO_SYSLOG: True"},{"line_number":745,"context_line":"      devstack_services:"},{"line_number":746,"context_line":"        atop: True"},{"line_number":747,"context_line":"        rabbit: True"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"b8efa590_5f3f283b","line":744,"in_reply_to":"235d3a2c_68c3827b","updated":"2025-06-16 19:22:53.000000000","message":"Acknowledged","commit_id":"3fa3d1987073ec522d58a51e996b1427034ce716"}]}
