)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"98da1480c0ca82f2dcb1bb0569f75aeea7e7b5a2","unresolved":true,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For Redfish-based drivers, the power readings are collected from the"},{"line_number":13,"context_line":"available PSU sensors and stored with each node history entry. This"},{"line_number":14,"context_line":"proviides the data required for future energy consumption calculations."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Energy (Wh) calculation will be added in a follow-up change once the"},{"line_number":17,"context_line":"duration fields are available."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"8f949845_4d7d624f","line":14,"updated":"2026-07-29 15:27:45.000000000","message":"nit: s/proviides/provides","commit_id":"ddd7ae3bcec8b1340dfed9ce76a6b294294b8627"},{"author":{"_account_id":38972,"name":"Esther Domfeh","display_name":"edomfeh","email":"estherdomfeh88@gmail.com","username":"edomfeh"},"change_message_id":"53e91485ac7b2e91a3b37f1dc840ffd1539bb81c","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For Redfish-based drivers, the power readings are collected from the"},{"line_number":13,"context_line":"available PSU sensors and stored with each node history entry. This"},{"line_number":14,"context_line":"proviides the data required for future energy consumption calculations."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Energy (Wh) calculation will be added in a follow-up change once the"},{"line_number":17,"context_line":"duration fields are available."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"72d16334_979a5b5c","line":14,"in_reply_to":"8f949845_4d7d624f","updated":"2026-07-30 16:47:04.000000000","message":"Done","commit_id":"ddd7ae3bcec8b1340dfed9ce76a6b294294b8627"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bae955f3c4181482161e0accdd7cbe533951bb80","unresolved":true,"context_lines":[{"line_number":14,"context_line":"provides the data required for future energy consumption calculations."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Energy (Wh) calculation will be added in a follow-up change once the"},{"line_number":17,"context_line":"duration fields are available."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: If723226628aa510cbe9cb978f4c67df7e1654e94"},{"line_number":20,"context_line":"Signed-off-by: Esther Domfeh \u003cestherdomfeh88@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5028be5e_46c86746","line":17,"updated":"2026-08-19 19:46:33.000000000","message":"So, why not build something in power monitoring which just increments it on the node object instead of history?\n\nSpecifically asking because node history recording is optional, and i smore geared at \"point in time error\" tracking. Not really for the consumption of power data for post processing?\n\nThe other aspect to consider is the way most power monitoring/usage counters are handled is a rolling point in time summary count, and then billing is derived from that. the only time it would be worthwhile on deploy is to record the start, and end calculation,  and then surface the result somewhere in the API... which does sort of make sense in Node history, albeit the entire set of power data I\u0027m not really a fan of.","commit_id":"86d44cef759b0eca36912f65992846be6bd55832"},{"author":{"_account_id":38972,"name":"Esther Domfeh","display_name":"edomfeh","email":"estherdomfeh88@gmail.com","username":"edomfeh"},"change_message_id":"9f0162f85a37e839166e7fd0de1d96c85ec1c158","unresolved":false,"context_lines":[{"line_number":14,"context_line":"provides the data required for future energy consumption calculations."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Energy (Wh) calculation will be added in a follow-up change once the"},{"line_number":17,"context_line":"duration fields are available."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: If723226628aa510cbe9cb978f4c67df7e1654e94"},{"line_number":20,"context_line":"Signed-off-by: Esther Domfeh \u003cestherdomfeh88@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"d6ae60a2_40202a20","line":17,"in_reply_to":"5028be5e_46c86746","updated":"2026-08-26 12:16:25.000000000","message":"Thanks Julia, that makes sense. I’ll take another look at the approach, especially around recording only the start/end power measurements rather than the full telemetry data.","commit_id":"86d44cef759b0eca36912f65992846be6bd55832"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32dc13655b9167784d582ae0586ca2ac15aedf11","unresolved":false,"context_lines":[{"line_number":14,"context_line":"provides the data required for future energy consumption calculations."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Energy (Wh) calculation will be added in a follow-up change once the"},{"line_number":17,"context_line":"duration fields are available."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: If723226628aa510cbe9cb978f4c67df7e1654e94"},{"line_number":20,"context_line":"Signed-off-by: Esther Domfeh \u003cestherdomfeh88@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"f1bf27de_36a9b9f9","line":17,"in_reply_to":"d6ae60a2_40202a20","updated":"2026-08-31 18:01:28.000000000","message":"I think that would make a ton of sense, for what it is worth.","commit_id":"86d44cef759b0eca36912f65992846be6bd55832"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"98da1480c0ca82f2dcb1bb0569f75aeea7e7b5a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e0cf80a6_16d10167","updated":"2026-07-29 15:27:45.000000000","message":"Looks good","commit_id":"ddd7ae3bcec8b1340dfed9ce76a6b294294b8627"},{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"07e1e1d4a331fb93802a9ee787c484cb63d3d0a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f3eb1f33_eaf40c02","updated":"2026-07-30 17:54:39.000000000","message":"Looks good to me","commit_id":"74004d0cb881bfc5991ce6b0a6ad2cb020e29d95"},{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"aac9105dc246caebfc5a0b23d89dbe8b9787a4e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"63a91e5e_1163c158","updated":"2026-07-30 18:01:54.000000000","message":"Seems like one of the test is still failing. Let\u0027s look into that.","commit_id":"74004d0cb881bfc5991ce6b0a6ad2cb020e29d95"},{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"9ca96837850b3e73049c5fd24bcaf6b7c9dd093f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"7ec119ec_00b1d90f","updated":"2026-08-05 17:14:34.000000000","message":"The patch looks good. I would like to confirm the version number part and maybe get more opinions on the field type.","commit_id":"5b9697d9c33d364a7b1f12ea5e6091711028d123"},{"author":{"_account_id":38972,"name":"Esther Domfeh","display_name":"edomfeh","email":"estherdomfeh88@gmail.com","username":"edomfeh"},"change_message_id":"7ed6192b1900621901c341fac2eff8e40ba1b7d5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c1dc2081_6ca321a3","updated":"2026-08-13 15:51:16.000000000","message":"recheck - POST-FAILURE due to connection timeouts on tempest jobs","commit_id":"86d44cef759b0eca36912f65992846be6bd55832"},{"author":{"_account_id":38972,"name":"Esther Domfeh","display_name":"edomfeh","email":"estherdomfeh88@gmail.com","username":"edomfeh"},"change_message_id":"9f0162f85a37e839166e7fd0de1d96c85ec1c158","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f281f815_0d2aba01","in_reply_to":"c1dc2081_6ca321a3","updated":"2026-08-26 12:16:25.000000000","message":"Done","commit_id":"86d44cef759b0eca36912f65992846be6bd55832"}],"ironic/common/release_mappings.py":[{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"9ca96837850b3e73049c5fd24bcaf6b7c9dd093f","unresolved":true,"context_lines":[{"line_number":1051,"context_line":"            \u0027Allocation\u0027: [\u00271.3\u0027, \u00271.2\u0027, \u00271.1\u0027],"},{"line_number":1052,"context_line":"            \u0027BIOSSetting\u0027: [\u00271.2\u0027, \u00271.1\u0027],"},{"line_number":1053,"context_line":"            \u0027Node\u0027: [\u00271.44\u0027, \u00271.43\u0027, \u00271.42\u0027, \u00271.41\u0027],"},{"line_number":1054,"context_line":"            \u0027NodeHistory\u0027: [\u00271.4\u0027, \u00271.3\u0027, \u00271.2\u0027, \u00271.1\u0027, \u00271.0\u0027],"},{"line_number":1055,"context_line":"            \u0027NodeInventory\u0027: [\u00271.1\u0027, \u00271.0\u0027],"},{"line_number":1056,"context_line":"            \u0027Conductor\u0027: [\u00271.6\u0027, \u00271.5\u0027, \u00271.4\u0027],"},{"line_number":1057,"context_line":"            \u0027Chassis\u0027: [\u00271.4\u0027, \u00271.3\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"52ef5432_12a68a2e","line":1054,"updated":"2026-08-05 17:14:34.000000000","message":"Since we already bumped node history version to 1.3 after the recent ironic release, we shouldn\u0027t have to bump it again. Or maybe I\u0027m missing something in this context.","commit_id":"5b9697d9c33d364a7b1f12ea5e6091711028d123"},{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"c487b5ae8eb840786bd17e9b952a5149d7e0e858","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"            \u0027Allocation\u0027: [\u00271.3\u0027, \u00271.2\u0027, \u00271.1\u0027],"},{"line_number":1052,"context_line":"            \u0027BIOSSetting\u0027: [\u00271.2\u0027, \u00271.1\u0027],"},{"line_number":1053,"context_line":"            \u0027Node\u0027: [\u00271.44\u0027, \u00271.43\u0027, \u00271.42\u0027, \u00271.41\u0027],"},{"line_number":1054,"context_line":"            \u0027NodeHistory\u0027: [\u00271.4\u0027, \u00271.3\u0027, \u00271.2\u0027, \u00271.1\u0027, \u00271.0\u0027],"},{"line_number":1055,"context_line":"            \u0027NodeInventory\u0027: [\u00271.1\u0027, \u00271.0\u0027],"},{"line_number":1056,"context_line":"            \u0027Conductor\u0027: [\u00271.6\u0027, \u00271.5\u0027, \u00271.4\u0027],"},{"line_number":1057,"context_line":"            \u0027Chassis\u0027: [\u00271.4\u0027, \u00271.3\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"71ffea5d_b88f36fe","line":1054,"in_reply_to":"52ef5432_12a68a2e","updated":"2026-08-12 08:33:09.000000000","message":"Done","commit_id":"5b9697d9c33d364a7b1f12ea5e6091711028d123"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":37087,"name":"Himanshu Roy","display_name":"Himanshu Roy","email":"hroy@redhat.com","username":"hroyrh"},"change_message_id":"9ca96837850b3e73049c5fd24bcaf6b7c9dd093f","unresolved":true,"context_lines":[{"line_number":545,"context_line":"    state \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":546,"context_line":"    target_provision_state \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":547,"context_line":"    duration_seconds \u003d Column(Integer, nullable\u003dTrue)"},{"line_number":548,"context_line":"    power_telemetry \u003d Column(db_types.JsonEncodedDict, nullable\u003dTrue)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"class NodeInventory(Base):"}],"source_content_type":"text/x-python","patch_set":8,"id":"abf2f4a0_37d94e9c","line":548,"updated":"2026-08-05 17:14:34.000000000","message":"I wonder what would be the tradeoffs in implementation complexity, performance and database size, for using a json field type versus breaking it down into standard fields.","commit_id":"5b9697d9c33d364a7b1f12ea5e6091711028d123"},{"author":{"_account_id":38972,"name":"Esther Domfeh","display_name":"edomfeh","email":"estherdomfeh88@gmail.com","username":"edomfeh"},"change_message_id":"b37af44ab75237139a0737d784dfec7e58830d77","unresolved":true,"context_lines":[{"line_number":545,"context_line":"    state \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":546,"context_line":"    target_provision_state \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":547,"context_line":"    duration_seconds \u003d Column(Integer, nullable\u003dTrue)"},{"line_number":548,"context_line":"    power_telemetry \u003d Column(db_types.JsonEncodedDict, nullable\u003dTrue)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"class NodeInventory(Base):"}],"source_content_type":"text/x-python","patch_set":8,"id":"f3649c31_156e7821","line":548,"in_reply_to":"5f792172_818e87ad","updated":"2026-08-14 10:06:43.000000000","message":"I looked into the tradeoffs. Based on what I found, keeping power_telemetry as a JSON field seems reasonable because the telemetry data can vary between hardware/vendors and may be extended with additional values later without requiring a schema change for every new metric.\n\nSeparate fields would make individual telemetry values easier to query and index, but the current Node History use case doesn\u0027t require filtering on individual power values. Given the limited size of the history table and Ironic\u0027s existing use of JSON-encoded dictionaries for heterogeneous hardware data, I think the flexibility of JSON is useful here.","commit_id":"5b9697d9c33d364a7b1f12ea5e6091711028d123"},{"author":{"_account_id":38972,"name":"Esther Domfeh","display_name":"edomfeh","email":"estherdomfeh88@gmail.com","username":"edomfeh"},"change_message_id":"af05bb4bbbf240a916b7a4bcb5299d7d8a8786e1","unresolved":true,"context_lines":[{"line_number":545,"context_line":"    state \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":546,"context_line":"    target_provision_state \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":547,"context_line":"    duration_seconds \u003d Column(Integer, nullable\u003dTrue)"},{"line_number":548,"context_line":"    power_telemetry \u003d Column(db_types.JsonEncodedDict, nullable\u003dTrue)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"class NodeInventory(Base):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f792172_818e87ad","line":548,"in_reply_to":"abf2f4a0_37d94e9c","updated":"2026-08-13 14:17:11.000000000","message":"Thanks Himanshu. I’ll look into the tradeoffs between using JSON versus separate fields and get back to you.","commit_id":"5b9697d9c33d364a7b1f12ea5e6091711028d123"}]}
