)]}'
{"/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":"419d57a45f604dd3b4f2b3e39912f4c4e25c6a5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"15bcffca_53a26a68","updated":"2022-11-01 17:55:00.000000000","message":"So, it looks like you have two distinct issues going on. Indexes being one thing. The other looks like the text field lengths. But at the same time it looks like it is just the index.","commit_id":"25cb586d51ea236114f575bc5ad47e94fb5d1664"},{"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":"d60e442f3dd78866b027be06602d80321c02a3f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"90fe1b19_149b99f8","updated":"2022-11-08 17:21:44.000000000","message":"We figured it out during office hours \\o/","commit_id":"d34c5ff962db3c41ef46143a118ee16173abede9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"139ea34869f6cd3f8e3534487449113b7c87b776","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"361c55e7_1a1f3726","updated":"2022-11-09 12:20:15.000000000","message":"Just a couple of comments inline","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"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":"2bab130bd3c35c7b76ca932a2c3906ea2f1fc7a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c80bbc5d_f953abc9","updated":"2022-11-08 21:31:58.000000000","message":"This part has gained sanity \\o/\n\nGood work Jakub","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8b1b3b22efae4af8a0ca702e0ba8cb292c600af1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"96022975_f6ad918e","updated":"2022-11-16 18:55:09.000000000","message":"db wise, it looks pretty good to me! We shouldn\u0027t forget the release notes at some point, but since there is no data, adding a new table won\u0027t be an impact.","commit_id":"59b0dc459907a0c13562c70037ee32d25742ca73"}],"ironic/db/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"139ea34869f6cd3f8e3534487449113b7c87b776","unresolved":true,"context_lines":[{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"    @abc.abstractmethod"},{"line_number":1452,"context_line":"    def get_node_inventory_by_node_id(self, node_id, limit\u003dNone, marker\u003dNone,"},{"line_number":1453,"context_line":"                                      sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":1454,"context_line":"        \"\"\"Get the node inventory for a given node."},{"line_number":1455,"context_line":""},{"line_number":1456,"context_line":"        :param node_id: The integer node ID."}],"source_content_type":"text/x-python","patch_set":9,"id":"55b41c4b_91bbd3c8","line":1453,"updated":"2022-11-09 12:20:15.000000000","message":"Other params seem useless: so far the design suggests only one inventory per node ID","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"87159fc1ea27e897401a9ed89c66128d4470d76c","unresolved":false,"context_lines":[{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"    @abc.abstractmethod"},{"line_number":1452,"context_line":"    def get_node_inventory_by_node_id(self, node_id, limit\u003dNone, marker\u003dNone,"},{"line_number":1453,"context_line":"                                      sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":1454,"context_line":"        \"\"\"Get the node inventory for a given node."},{"line_number":1455,"context_line":""},{"line_number":1456,"context_line":"        :param node_id: The integer node ID."}],"source_content_type":"text/x-python","patch_set":9,"id":"fa39788e_07f19499","line":1453,"in_reply_to":"55b41c4b_91bbd3c8","updated":"2022-11-09 15:34:13.000000000","message":"Done","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"}],"ironic/db/sqlalchemy/alembic/versions/0ac0f39bc5aa_add_node_inventory_table.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"419d57a45f604dd3b4f2b3e39912f4c4e25c6a5e","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                    sa.Column(\u0027plugin_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_inventory0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":43,"context_line":"                    sa.Index(\u0027inventory_node_id_idx\u0027, \u0027node_id\u0027),"},{"line_number":44,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ea81a7c3_99df792b","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":76},"updated":"2022-11-01 17:55:00.000000000","message":"So I think you\u0027ll want to index uuid as well:\n\n  ( \u0027remove_index\u0027,\n    Index(\u0027inventory_node_id_idx\u0027, Column(\u0027node_id\u0027, INTEGER(), table\u003d\u003cnode_inventory\u003e))),\n  ( \u0027remove_index\u0027,\n    Index(\u0027uniq_inventory0uuid\u0027, Column(\u0027uuid\u0027, VARCHAR(length\u003d36), table\u003d\u003cnode_inventory\u003e, nullable\u003dFalse)))]\n    \n At least explicitly on the model schema *and* the creation.\n \n In order to have a unique constraint, you need an index. So if you create a constraint, it makes an index under the hood.","commit_id":"25cb586d51ea236114f575bc5ad47e94fb5d1664"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"fbc769c32297ce92eb1fdcdff3aaba2a55f8a02a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                    sa.Column(\u0027plugin_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_inventory0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":43,"context_line":"                    sa.Index(\u0027inventory_node_id_idx\u0027, \u0027node_id\u0027),"},{"line_number":44,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"b797c83e_194e2999","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":76},"in_reply_to":"46eebd9c_dc8ed373","updated":"2022-11-08 17:50:12.000000000","message":"Done","commit_id":"25cb586d51ea236114f575bc5ad47e94fb5d1664"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d8443c6310e06e053be477a613c2c14e438ae2df","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                    sa.Column(\u0027plugin_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_inventory0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":43,"context_line":"                    sa.Index(\u0027inventory_node_id_idx\u0027, \u0027node_id\u0027),"},{"line_number":44,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"46eebd9c_dc8ed373","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":76},"in_reply_to":"ea81a7c3_99df792b","updated":"2022-11-02 11:34:25.000000000","message":"I\u0027m not convinced we need UUIDs here at all. I can imagine eventually having an inventory history, but I\u0027d postpone it.","commit_id":"25cb586d51ea236114f575bc5ad47e94fb5d1664"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"419d57a45f604dd3b4f2b3e39912f4c4e25c6a5e","unresolved":true,"context_lines":[{"line_number":42,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":43,"context_line":"                    sa.Index(\u0027inventory_node_id_idx\u0027, \u0027node_id\u0027),"},{"line_number":44,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"},{"line_number":45,"context_line":"                    mysql_DEFAULT_CHARSET\u003d\u0027UTF8\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"520c4f30_4860d829","line":45,"range":{"start_line":45,"start_character":41,"end_line":45,"end_character":48},"updated":"2022-11-01 17:55:00.000000000","message":"UTF8MB3\n\nUTF8 in mysql is, for the most part, aliased to UTF8MB3, but UTF8MB4 is a think and we\u0027re structurally incompatible with it. So if it is ever changed to be a default of UTF8MB4, then ironic will break.","commit_id":"25cb586d51ea236114f575bc5ad47e94fb5d1664"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"fbc769c32297ce92eb1fdcdff3aaba2a55f8a02a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":43,"context_line":"                    sa.Index(\u0027inventory_node_id_idx\u0027, \u0027node_id\u0027),"},{"line_number":44,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"},{"line_number":45,"context_line":"                    mysql_DEFAULT_CHARSET\u003d\u0027UTF8\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"24dbd8f6_c21ba7f6","line":45,"range":{"start_line":45,"start_character":41,"end_line":45,"end_character":48},"in_reply_to":"520c4f30_4860d829","updated":"2022-11-08 17:50:12.000000000","message":"Done","commit_id":"25cb586d51ea236114f575bc5ad47e94fb5d1664"},{"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":"d60e442f3dd78866b027be06602d80321c02a3f5","unresolved":true,"context_lines":[{"line_number":33,"context_line":"                    sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":34,"context_line":"                    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"                    sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":36,"context_line":"                    sa.Column(\u0027inventory_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":37,"context_line":"                    sa.Column(\u0027plugin_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":38,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"35525923_b518924f","line":36,"updated":"2022-11-08 17:21:44.000000000","message":"Replace sa.Text() with db_types.JsonEncodedDict(mysql_as_long\u003dTrue).impl","commit_id":"d34c5ff962db3c41ef46143a118ee16173abede9"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"9fe37b9e9ef90cdd7b2f76cfb2f8b77ac8f6d9d0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                    sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":34,"context_line":"                    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"                    sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":36,"context_line":"                    sa.Column(\u0027inventory_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":37,"context_line":"                    sa.Column(\u0027plugin_data\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":38,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"6b528a78_e5e27eb2","line":36,"in_reply_to":"35525923_b518924f","updated":"2022-11-08 17:49:50.000000000","message":"Done","commit_id":"d34c5ff962db3c41ef46143a118ee16173abede9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"139ea34869f6cd3f8e3534487449113b7c87b776","unresolved":true,"context_lines":[{"line_number":35,"context_line":"                    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"                    sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":37,"context_line":"                    sa.Column(\u0027inventory_data\u0027, db_types.JsonEncodedDict("},{"line_number":38,"context_line":"                        mysql_as_long\u003dTrue).impl, nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.Column(\u0027plugin_data\u0027, db_types.JsonEncodedDict("},{"line_number":40,"context_line":"                        mysql_as_long\u003dTrue).impl, nullable\u003dTrue),"},{"line_number":41,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":9,"id":"9b265400_79e87259","line":38,"updated":"2022-11-09 12:20:15.000000000","message":"TIL!","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"87159fc1ea27e897401a9ed89c66128d4470d76c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"                    sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":37,"context_line":"                    sa.Column(\u0027inventory_data\u0027, db_types.JsonEncodedDict("},{"line_number":38,"context_line":"                        mysql_as_long\u003dTrue).impl, nullable\u003dTrue),"},{"line_number":39,"context_line":"                    sa.Column(\u0027plugin_data\u0027, db_types.JsonEncodedDict("},{"line_number":40,"context_line":"                        mysql_as_long\u003dTrue).impl, nullable\u003dTrue),"},{"line_number":41,"context_line":"                    sa.Column(\u0027node_id\u0027, sa.Integer(), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f58e7e0_f3fd2be9","line":38,"in_reply_to":"9b265400_79e87259","updated":"2022-11-09 15:34:13.000000000","message":"Ack","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20a2774a349bdcfb61c70b92feeba7a396a6129f","unresolved":true,"context_lines":[{"line_number":917,"context_line":"            history_query \u003d model_query("},{"line_number":918,"context_line":"                models.NodeHistory).filter_by(node_id\u003dnode_id)"},{"line_number":919,"context_line":"            history_query.delete()"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"            query.delete()"},{"line_number":922,"context_line":""},{"line_number":923,"context_line":"    def update_node(self, node_id, values):"}],"source_content_type":"text/x-python","patch_set":1,"id":"297e3c2b_02a3c174","line":920,"updated":"2022-10-25 09:57:43.000000000","message":"Make sure to delete the inventory here","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"3405b77fe48dbca2d8bf37f2ee3d60e714117412","unresolved":false,"context_lines":[{"line_number":917,"context_line":"            history_query \u003d model_query("},{"line_number":918,"context_line":"                models.NodeHistory).filter_by(node_id\u003dnode_id)"},{"line_number":919,"context_line":"            history_query.delete()"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"            query.delete()"},{"line_number":922,"context_line":""},{"line_number":923,"context_line":"    def update_node(self, node_id, values):"}],"source_content_type":"text/x-python","patch_set":1,"id":"55aea038_0e425f33","line":920,"in_reply_to":"297e3c2b_02a3c174","updated":"2022-10-25 11:02:25.000000000","message":"Done","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20a2774a349bdcfb61c70b92feeba7a396a6129f","unresolved":true,"context_lines":[{"line_number":2619,"context_line":"                raise exception.NodeInventoryNotFound("},{"line_number":2620,"context_line":"                    node_id\u003dinventory_node_id)"},{"line_number":2621,"context_line":""},{"line_number":2622,"context_line":"    def get_node_inventory_by_id(self, inventory_id):"},{"line_number":2623,"context_line":"        query \u003d model_query(models.NodeInventory).filter_by(id\u003dinventory_id)"},{"line_number":2624,"context_line":"        try:"},{"line_number":2625,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":1,"id":"195cbe7c_08ef3295","line":2622,"updated":"2022-10-25 09:57:43.000000000","message":"I wonder if we even need this call (outside of unit tests). The inventory ID will never be exposed to end users.","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"3405b77fe48dbca2d8bf37f2ee3d60e714117412","unresolved":false,"context_lines":[{"line_number":2619,"context_line":"                raise exception.NodeInventoryNotFound("},{"line_number":2620,"context_line":"                    node_id\u003dinventory_node_id)"},{"line_number":2621,"context_line":""},{"line_number":2622,"context_line":"    def get_node_inventory_by_id(self, inventory_id):"},{"line_number":2623,"context_line":"        query \u003d model_query(models.NodeInventory).filter_by(id\u003dinventory_id)"},{"line_number":2624,"context_line":"        try:"},{"line_number":2625,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":1,"id":"8c27f51d_5773033f","line":2622,"in_reply_to":"195cbe7c_08ef3295","updated":"2022-10-25 11:02:25.000000000","message":"Done","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"139ea34869f6cd3f8e3534487449113b7c87b776","unresolved":true,"context_lines":[{"line_number":2615,"context_line":"            return inventory"},{"line_number":2616,"context_line":""},{"line_number":2617,"context_line":"    @oslo_db_api.retry_on_deadlock"},{"line_number":2618,"context_line":"    def destroy_node_inventory_by_node_id(self, inventory_node_id):"},{"line_number":2619,"context_line":"        with _session_for_write():"},{"line_number":2620,"context_line":"            query \u003d model_query(models.NodeInventory).filter_by("},{"line_number":2621,"context_line":"                node_id\u003dinventory_node_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"817d02ab_29bbd444","line":2618,"updated":"2022-11-09 12:20:15.000000000","message":"nit: the param is called node_id in other instances","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"87159fc1ea27e897401a9ed89c66128d4470d76c","unresolved":false,"context_lines":[{"line_number":2615,"context_line":"            return inventory"},{"line_number":2616,"context_line":""},{"line_number":2617,"context_line":"    @oslo_db_api.retry_on_deadlock"},{"line_number":2618,"context_line":"    def destroy_node_inventory_by_node_id(self, inventory_node_id):"},{"line_number":2619,"context_line":"        with _session_for_write():"},{"line_number":2620,"context_line":"            query \u003d model_query(models.NodeInventory).filter_by("},{"line_number":2621,"context_line":"                node_id\u003dinventory_node_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"56361bfe_ff6df425","line":2618,"in_reply_to":"817d02ab_29bbd444","updated":"2022-11-09 15:34:13.000000000","message":"Done","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"139ea34869f6cd3f8e3534487449113b7c87b776","unresolved":true,"context_lines":[{"line_number":2617,"context_line":"    @oslo_db_api.retry_on_deadlock"},{"line_number":2618,"context_line":"    def destroy_node_inventory_by_node_id(self, inventory_node_id):"},{"line_number":2619,"context_line":"        with _session_for_write():"},{"line_number":2620,"context_line":"            query \u003d model_query(models.NodeInventory).filter_by("},{"line_number":2621,"context_line":"                node_id\u003dinventory_node_id)"},{"line_number":2622,"context_line":"            count \u003d query.delete()"},{"line_number":2623,"context_line":"            if count \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1d18fda1_6d8e5010","line":2620,"updated":"2022-11-09 12:20:15.000000000","message":"Please don\u0027t use model_query, it opens another transaction (and we\u0027ve recently realized). Until we fully migrate to the SQLAlchemy 2.0 style, you can do session.query instead. See https://review.opendev.org/c/openstack/ironic/+/862506","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"87159fc1ea27e897401a9ed89c66128d4470d76c","unresolved":false,"context_lines":[{"line_number":2617,"context_line":"    @oslo_db_api.retry_on_deadlock"},{"line_number":2618,"context_line":"    def destroy_node_inventory_by_node_id(self, inventory_node_id):"},{"line_number":2619,"context_line":"        with _session_for_write():"},{"line_number":2620,"context_line":"            query \u003d model_query(models.NodeInventory).filter_by("},{"line_number":2621,"context_line":"                node_id\u003dinventory_node_id)"},{"line_number":2622,"context_line":"            count \u003d query.delete()"},{"line_number":2623,"context_line":"            if count \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"e4e2f049_4c716c1c","line":2620,"in_reply_to":"1d18fda1_6d8e5010","updated":"2022-11-09 15:34:13.000000000","message":"Done","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20a2774a349bdcfb61c70b92feeba7a396a6129f","unresolved":true,"context_lines":[{"line_number":473,"context_line":"        table_args())"},{"line_number":474,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":475,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":476,"context_line":"    inventory_data \u003d Column(Text, nullable\u003dTrue)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"13002916_7a02df35","line":476,"updated":"2022-10-25 09:57:43.000000000","message":"You need to use Column(db_types.JsonEncodedDict(mysql_as_long\u003dTrue)) to use the automatic conversion to/from JSON (and to tell sqlalchemy to use a large underlying storage - TEXT is something like 16M by default).","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"3405b77fe48dbca2d8bf37f2ee3d60e714117412","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        table_args())"},{"line_number":474,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":475,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":476,"context_line":"    inventory_data \u003d Column(Text, nullable\u003dTrue)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"142a253e_cfbfc7b0","line":476,"in_reply_to":"13002916_7a02df35","updated":"2022-10-25 11:02:25.000000000","message":"Done","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20a2774a349bdcfb61c70b92feeba7a396a6129f","unresolved":true,"context_lines":[{"line_number":475,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":476,"context_line":"    inventory_data \u003d Column(Text, nullable\u003dTrue)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"def get_class(model_name):"},{"line_number":480,"context_line":"    \"\"\"Returns the model class with the specified name."},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d910628b_54dbbe26","line":478,"updated":"2022-10-25 09:57:43.000000000","message":"Another thought. Currently the introspection data is one huge blob that combined the inventory from IPA (in the \"inventory\" key) and assorted data generated by plugins (on the IPA and Inspector sides).\n\nI think we should split these. So, the canonical inventory will be kept in \"inventory\", while anything generated or modified by plugins will be kept in another field \"plugin_data\".\n\nThe reasons are twofold. First, consumers who are only interested in the inventory will be able to filter only it using e.g. ?fields\u003dinventory. Second, we\u0027ll provide a clear difference between something generated according to the documented schema and something that can different depending on the exact set of plugins.\n\nWDYT?","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"3405b77fe48dbca2d8bf37f2ee3d60e714117412","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":476,"context_line":"    inventory_data \u003d Column(Text, nullable\u003dTrue)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"def get_class(model_name):"},{"line_number":480,"context_line":"    \"\"\"Returns the model class with the specified name."},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"246eedc6_0114aacd","line":478,"in_reply_to":"d910628b_54dbbe26","updated":"2022-10-25 11:02:25.000000000","message":"This sounds reasonable. I will add the field.","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"}],"ironic/objects/node_inventory.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20a2774a349bdcfb61c70b92feeba7a396a6129f","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        return inventory"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def get_by_node_id(cls, context, node_id):"},{"line_number":67,"context_line":"        \"\"\"Get a NodeInventory object by its node ID."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :param cls: the :class:`NodeInventory`"}],"source_content_type":"text/x-python","patch_set":1,"id":"35e5266b_b4dc0c48","line":66,"updated":"2022-10-25 09:57:43.000000000","message":"We probably need get_by_node_uuid (not sure, check other objects).","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"8220b1a041882872cc89e4a3d0a6f828c34fa1af","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return inventory"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def get_by_node_id(cls, context, node_id):"},{"line_number":67,"context_line":"        \"\"\"Get a NodeInventory object by its node ID."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :param cls: the :class:`NodeInventory`"}],"source_content_type":"text/x-python","patch_set":1,"id":"fab10419_71805bc0","line":66,"in_reply_to":"03368fcd_426c8e4c","updated":"2022-10-25 23:57:10.000000000","message":"Adding the function to be used for API requests.","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"3405b77fe48dbca2d8bf37f2ee3d60e714117412","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        return inventory"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def get_by_node_id(cls, context, node_id):"},{"line_number":67,"context_line":"        \"\"\"Get a NodeInventory object by its node ID."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :param cls: the :class:`NodeInventory`"}],"source_content_type":"text/x-python","patch_set":1,"id":"03368fcd_426c8e4c","line":66,"in_reply_to":"35e5266b_b4dc0c48","updated":"2022-10-25 11:02:25.000000000","message":"I will need to look more in-depth at this.\ndeployment uses get_node_by_uuid and get_node_by_id is defined by bios and trait","commit_id":"dfde9ac4b04c8adfef4984f1bbc47af72b69d387"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"139ea34869f6cd3f8e3534487449113b7c87b776","unresolved":true,"context_lines":[{"line_number":87,"context_line":"        :raises: NodeInventoryNotFound"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        node \u003d node_obj.Node.get_by_uuid(context, node_uuid)"},{"line_number":91,"context_line":"        return cls._from_node_object(context, node)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def create(self, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"12f837fa_28d84956","line":90,"updated":"2022-11-09 12:20:15.000000000","message":"You\u0027re returning a Node, not an inventory here.","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"87159fc1ea27e897401a9ed89c66128d4470d76c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        :raises: NodeInventoryNotFound"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        node \u003d node_obj.Node.get_by_uuid(context, node_uuid)"},{"line_number":91,"context_line":"        return cls._from_node_object(context, node)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def create(self, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"71746389_5355c5e0","line":90,"in_reply_to":"12f837fa_28d84956","updated":"2022-11-09 15:34:13.000000000","message":"Removed the get_by_node_uuid function","commit_id":"8136b97e44b451d68eba112b76cf1e65123f15b6"}]}
