)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"197ad9930ab92264d443f9354cf0df6308ffdd3c","unresolved":true,"context_lines":[{"line_number":20,"context_line":"that had unnecessary arguments defined."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[1] https://docs.sqlalchemy.org/en/14/orm/backref.html"},{"line_number":23,"context_line":"[2] https://that.guru/blog/sqlalchemy-relationships-without-foreign-keys/"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I5a135b012dabdff7cf06204fc3c5438aaa0985c9"},{"line_number":26,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7403bf5a_cf7afa66","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":73},"updated":"2023-04-12 17:19:21.000000000","message":"nice blog","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4587813c871568f0fa0ce4f59bb0c8ab7ddb5b04","unresolved":false,"context_lines":[{"line_number":20,"context_line":"that had unnecessary arguments defined."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[1] https://docs.sqlalchemy.org/en/14/orm/backref.html"},{"line_number":23,"context_line":"[2] https://that.guru/blog/sqlalchemy-relationships-without-foreign-keys/"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I5a135b012dabdff7cf06204fc3c5438aaa0985c9"},{"line_number":26,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"00f1c827_fc2a38c7","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":73},"in_reply_to":"7403bf5a_cf7afa66","updated":"2023-04-13 13:00:34.000000000","message":"Thanks 😊","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2e92e03d_760757da","updated":"2023-09-12 09:44:34.000000000","message":"I was reviewing all the backrefs but I think you missed to add a specific join for deleted\u003d0 in the now explicit relationship Instance.bdms.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"aaddc22909a65dc015ee178a4cd0ea585a33c686","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5f5955b8_b548e5b4","updated":"2023-05-31 07:45:56.000000000","message":"While I don\u0027t see anything explicitly wrong with this I don\u0027t feel confident enough in my sqla knowledge to +2 this.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"197ad9930ab92264d443f9354cf0df6308ffdd3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"decd5f1d_59d15781","updated":"2023-04-12 17:19:21.000000000","message":"i think this looks correct to me.\nthanks for writing the blog to detail how this works","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5ed87637_711347a5","updated":"2023-09-13 09:10:04.000000000","message":"Just one last needed modification, please.","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"44db0033abdb368ecb36e55ae0ad8912007c9921","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0919b4d4_0134092b","updated":"2023-09-13 08:52:08.000000000","message":"recheck post failure","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f6b09c47232837465310c12e385f5bf2a704d913","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"637ae6c7_be6a0800","updated":"2023-09-13 14:15:12.000000000","message":"Awaiting Zuul before +2ing.","commit_id":"031eda582642a635286262959d8ca729d34ee82c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63c48c6157412d09f03bfe58903811803d55ee38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f8ae38b7_2098685a","updated":"2023-09-22 10:14:14.000000000","message":"im still happy with this. you mentioned that yoru going to respine the follow up so ill review that when the next reviewsion is pushed","commit_id":"031eda582642a635286262959d8ca729d34ee82c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1bb03966a6a55ba55d183108e96c425b3ce6e3a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2ac8c160_1a83666a","updated":"2023-09-14 08:44:08.000000000","message":"recheck","commit_id":"031eda582642a635286262959d8ca729d34ee82c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2bb767d33289a9bbe4564d18f5dd0191f52d70e5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"670988f4_efb479ff","updated":"2023-09-14 12:30:04.000000000","message":"recheck bug 2033887","commit_id":"031eda582642a635286262959d8ca729d34ee82c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"30c572e91b1f90e77075e4c27cbae7a9964e3ebf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cb255141_836faa95","updated":"2023-09-14 15:03:08.000000000","message":"recheck bug 2033887","commit_id":"031eda582642a635286262959d8ca729d34ee82c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b19139e6acdd6d8d87b8ba5fde5a375620fc11d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f05ec5f7_a468eb2a","updated":"2023-09-13 19:04:36.000000000","message":"recheck guest panic in nova-next","commit_id":"031eda582642a635286262959d8ca729d34ee82c"}],"nova/db/api/models.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    disabled \u003d sa.Column(sa.Boolean, default\u003dFalse)"},{"line_number":150,"context_line":"    host_mapping \u003d orm.relationship("},{"line_number":151,"context_line":"        \u0027HostMapping\u0027,"},{"line_number":152,"context_line":"        backref\u003dorm.backref(\u0027cell_mapping\u0027, uselist\u003dFalse),"},{"line_number":153,"context_line":"        foreign_keys\u003did,"},{"line_number":154,"context_line":"        primaryjoin\u003d\u0027CellMapping.id \u003d\u003d HostMapping.cell_id\u0027)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a210fa7f_feb6f91c","side":"PARENT","line":152,"updated":"2023-09-12 09:44:34.000000000","message":"OK so the implicit HostMapping.cell_mapping relationship is now explicitly defined L205.","commit_id":"03d2715ed492350fa11908aea0fdd0265993e284"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    queued_for_delete \u003d sa.Column(sa.Boolean)"},{"line_number":181,"context_line":"    cell_mapping \u003d orm.relationship("},{"line_number":182,"context_line":"        \u0027CellMapping\u0027,"},{"line_number":183,"context_line":"        backref\u003dorm.backref(\u0027instance_mapping\u0027, uselist\u003dFalse),"},{"line_number":184,"context_line":"        foreign_keys\u003dcell_id,"},{"line_number":185,"context_line":"        primaryjoin\u003d\u0027InstanceMapping.cell_id \u003d\u003d CellMapping.id\u0027)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a09c31ff_35b4170c","side":"PARENT","line":183,"updated":"2023-09-12 09:44:34.000000000","message":"OK, so the implicit CellMapping.instance_mapping relationship is now defined L155 at right.","commit_id":"03d2715ed492350fa11908aea0fdd0265993e284"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        primaryjoin\u003d\u0027InstanceGroup.id \u003d\u003d InstanceGroupPolicy.group_id\u0027)"},{"line_number":360,"context_line":"    _members \u003d orm.relationship("},{"line_number":361,"context_line":"        InstanceGroupMember,"},{"line_number":362,"context_line":"        primaryjoin\u003d\u0027InstanceGroup.id \u003d\u003d InstanceGroupMember.group_id\u0027)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    @property"},{"line_number":365,"context_line":"    def policy(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f9ed6b8e_107f6e42","side":"PARENT","line":362,"updated":"2023-09-12 09:44:34.000000000","message":"I don\u0027t see any backrefs here, so we don\u0027t need to add any extra explicit relationship.","commit_id":"03d2715ed492350fa11908aea0fdd0265993e284"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \u0027HostMapping\u0027,"},{"line_number":153,"context_line":"        back_populates\u003d\u0027cell_mapping\u0027,"},{"line_number":154,"context_line":"    )"},{"line_number":155,"context_line":"    instance_mapping \u003d orm.relationship("},{"line_number":156,"context_line":"        \u0027InstanceMapping\u0027,"},{"line_number":157,"context_line":"        back_populates\u003d\u0027cell_mapping\u0027,"},{"line_number":158,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"9d7afea5_a614d810","line":155,"updated":"2023-09-12 09:44:34.000000000","message":"comes from left L183","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"197ad9930ab92264d443f9354cf0df6308ffdd3c","unresolved":true,"context_lines":[{"line_number":155,"context_line":"    instance_mapping \u003d orm.relationship("},{"line_number":156,"context_line":"        \u0027InstanceMapping\u0027,"},{"line_number":157,"context_line":"        back_populates\u003d\u0027cell_mapping\u0027,"},{"line_number":158,"context_line":"    )"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class InstanceMapping(BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e63b2e93_4d4f4631","line":158,"updated":"2023-04-12 17:19:21.000000000","message":"ok so no need to specify a join constraint here because we are joingin based on the id\n\nand on the host mappign table we define cell_id as\n\n    cell_id \u003d sa.Column(\n        sa.Integer, sa.ForeignKey(\u0027cell_mappings.id\u0027), nullable\u003dFalse)\n        \nso the ForeignKey contaitnt can be auto discovered\n\nand that is basically true of all the relevent tabels in the api model.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4587813c871568f0fa0ce4f59bb0c8ab7ddb5b04","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    instance_mapping \u003d orm.relationship("},{"line_number":156,"context_line":"        \u0027InstanceMapping\u0027,"},{"line_number":157,"context_line":"        back_populates\u003d\u0027cell_mapping\u0027,"},{"line_number":158,"context_line":"    )"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class InstanceMapping(BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff107fb9_92df7f4e","line":158,"in_reply_to":"e63b2e93_4d4f4631","updated":"2023-04-13 13:00:34.000000000","message":"Exactly, yes","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        sa.Integer, sa.ForeignKey(\u0027cell_mappings.id\u0027), nullable\u003dFalse)"},{"line_number":203,"context_line":"    host \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    cell_mapping \u003d orm.relationship("},{"line_number":206,"context_line":"        \u0027CellMapping\u0027,"},{"line_number":207,"context_line":"        back_populates\u003d\u0027host_mapping\u0027,"},{"line_number":208,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"04f1360f_dbf09ab8","line":205,"updated":"2023-09-12 09:44:34.000000000","message":"comes from left L152","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":true,"context_lines":[{"line_number":245,"context_line":"    description \u003d sa.Column(sa.Text)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    extra_specs \u003d orm.relationship(\u0027FlavorExtraSpecs\u0027, back_populates\u003d\u0027flavor\u0027)"},{"line_number":248,"context_line":"    projects \u003d orm.relationship(\u0027FlavorProjects\u0027, back_populates\u003d\u0027flavor\u0027)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"class FlavorExtraSpecs(BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"85562b5f_828556ec","line":248,"updated":"2023-09-12 09:44:34.000000000","message":"those two lines come from the implicit backrefs below","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"}],"nova/db/main/models.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    instance \u003d orm.relationship("},{"line_number":164,"context_line":"        \"Instance\","},{"line_number":165,"context_line":"        backref\u003d\u0027services\u0027,"},{"line_number":166,"context_line":"        primaryjoin\u003d\u0027and_(Service.host \u003d\u003d Instance.host,\u0027"},{"line_number":167,"context_line":"                    \u0027Service.binary \u003d\u003d \"nova-compute\",\u0027"},{"line_number":168,"context_line":"                    \u0027Instance.deleted \u003d\u003d 0)\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a2d3c436_52a1134a","side":"PARENT","line":165,"updated":"2023-09-12 09:44:34.000000000","message":"checked the backref","commit_id":"03d2715ed492350fa11908aea0fdd0265993e284"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":437,"context_line":"    instance_uuid \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027instances.uuid\u0027),"},{"line_number":438,"context_line":"                           nullable\u003dFalse)"},{"line_number":439,"context_line":"    instance \u003d orm.relationship(Instance,"},{"line_number":440,"context_line":"                            backref\u003dorm.backref(\u0027info_cache\u0027, uselist\u003dFalse),"},{"line_number":441,"context_line":"                            foreign_keys\u003dinstance_uuid,"},{"line_number":442,"context_line":"                            primaryjoin\u003dinstance_uuid \u003d\u003d Instance.uuid)"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f1f018ec_f5560f7b","side":"PARENT","line":440,"updated":"2023-09-12 09:44:34.000000000","message":"checked the backref","commit_id":"03d2715ed492350fa11908aea0fdd0265993e284"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":461,"context_line":"    # and can be removed in the future release."},{"line_number":462,"context_line":"    resources \u003d orm.deferred(sa.Column(sa.Text))"},{"line_number":463,"context_line":"    instance \u003d orm.relationship(Instance,"},{"line_number":464,"context_line":"                            backref\u003dorm.backref(\u0027extra\u0027,"},{"line_number":465,"context_line":"                                                uselist\u003dFalse),"},{"line_number":466,"context_line":"                            foreign_keys\u003dinstance_uuid,"},{"line_number":467,"context_line":"                            primaryjoin\u003dinstance_uuid \u003d\u003d Instance.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f9a4bf5_3a7fccef","side":"PARENT","line":464,"updated":"2023-09-12 09:44:34.000000000","message":"checked the backref","commit_id":"03d2715ed492350fa11908aea0fdd0265993e284"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"197ad9930ab92264d443f9354cf0df6308ffdd3c","unresolved":true,"context_lines":[{"line_number":166,"context_line":"        primaryjoin\u003d\u0027and_(Service.host \u003d\u003d Instance.host,\u0027"},{"line_number":167,"context_line":"                    \u0027Service.binary \u003d\u003d \"nova-compute\",\u0027"},{"line_number":168,"context_line":"                    \u0027Instance.deleted \u003d\u003d 0)\u0027,"},{"line_number":169,"context_line":"        foreign_keys\u003dhost,"},{"line_number":170,"context_line":"    )"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"58441656_c2580d71","line":169,"updated":"2023-04-12 17:19:21.000000000","message":"dan smith is reworkign this this cycle so i woudl prefer to merge your change before theres if we can review this early.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4587813c871568f0fa0ce4f59bb0c8ab7ddb5b04","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        primaryjoin\u003d\u0027and_(Service.host \u003d\u003d Instance.host,\u0027"},{"line_number":167,"context_line":"                    \u0027Service.binary \u003d\u003d \"nova-compute\",\u0027"},{"line_number":168,"context_line":"                    \u0027Instance.deleted \u003d\u003d 0)\u0027,"},{"line_number":169,"context_line":"        foreign_keys\u003dhost,"},{"line_number":170,"context_line":"    )"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7c71c804_9075a60c","line":169,"in_reply_to":"58441656_c2580d71","updated":"2023-04-13 13:00:34.000000000","message":"Ack","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"197ad9930ab92264d443f9354cf0df6308ffdd3c","unresolved":true,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    hidden \u003d sa.Column(sa.Boolean, default\u003dFalse)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    block_device_mapping \u003d orm.relationship("},{"line_number":424,"context_line":"        \u0027BlockDeviceMapping\u0027,"},{"line_number":425,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":426,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"62a1b7bc_2ddb5f8a","line":423,"updated":"2023-04-12 17:19:21.000000000","message":"so the main effect fo this model change backref -\u003e back_populates seams to be actully modeling the related fileds in teh  class that is composed of them.\n\nthis will make the model look a lot more like the objects so while more verbose i think its a good imporvement.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4587813c871568f0fa0ce4f59bb0c8ab7ddb5b04","unresolved":false,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    hidden \u003d sa.Column(sa.Boolean, default\u003dFalse)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    block_device_mapping \u003d orm.relationship("},{"line_number":424,"context_line":"        \u0027BlockDeviceMapping\u0027,"},{"line_number":425,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":426,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3d8ecdcc_3342218a","line":423,"in_reply_to":"62a1b7bc_2ddb5f8a","updated":"2023-04-13 13:00:34.000000000","message":"Good and *necessary* (at least to keep SQLAlchemy happy)","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":true,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    block_device_mapping \u003d orm.relationship("},{"line_number":424,"context_line":"        \u0027BlockDeviceMapping\u0027,"},{"line_number":425,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":426,"context_line":"    )"},{"line_number":427,"context_line":"    console_auth_tokens \u003d orm.relationship("},{"line_number":428,"context_line":"        \u0027ConsoleAuthToken\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a67fb759_b9718258","line":425,"updated":"2023-09-12 09:44:34.000000000","message":"why aren\u0027t you joining on deleted\u003d0 like it was done on the other side-ways relationship ?","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"17c4b99fcbc5edeb4631c9dc742e66837d7206b2","unresolved":false,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    block_device_mapping \u003d orm.relationship("},{"line_number":424,"context_line":"        \u0027BlockDeviceMapping\u0027,"},{"line_number":425,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":426,"context_line":"    )"},{"line_number":427,"context_line":"    console_auth_tokens \u003d orm.relationship("},{"line_number":428,"context_line":"        \u0027ConsoleAuthToken\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fca223b1_23d150fa","line":425,"in_reply_to":"8b39cabb_785fb006","updated":"2023-09-12 10:57:16.000000000","message":"https://review.opendev.org/c/openstack/nova/+/894635","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"be58ba7debcee41ee840e6273544a1eca2fe23c0","unresolved":true,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    block_device_mapping \u003d orm.relationship("},{"line_number":424,"context_line":"        \u0027BlockDeviceMapping\u0027,"},{"line_number":425,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":426,"context_line":"    )"},{"line_number":427,"context_line":"    console_auth_tokens \u003d orm.relationship("},{"line_number":428,"context_line":"        \u0027ConsoleAuthToken\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"8b39cabb_785fb006","line":425,"in_reply_to":"a67fb759_b9718258","updated":"2023-09-12 10:48:54.000000000","message":"Good point. The fact that this isn\u0027t triggering any failing tests suggests this side of the relationship is never used and could be deleted. Will remove in a follow-up.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24bb1622c0c552e2680a222ef88062b2699b43c4","unresolved":false,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    block_device_mapping \u003d orm.relationship("},{"line_number":424,"context_line":"        \u0027BlockDeviceMapping\u0027,"},{"line_number":425,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":426,"context_line":"    )"},{"line_number":427,"context_line":"    console_auth_tokens \u003d orm.relationship("},{"line_number":428,"context_line":"        \u0027ConsoleAuthToken\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f1269df_15cbf2a7","line":425,"in_reply_to":"fca223b1_23d150fa","updated":"2023-09-12 13:43:38.000000000","message":"\u003e The fact that this isn\u0027t triggering any failing tests suggests this side of the relationship is never used and could be deleted. \n\nWell, to be honest, I don\u0027t trust our test coverage for verifying this kind of query. That would mean that we would have a test that would create a BDM, delete it then and then verify that instance.block_device_mapping value is not providing the deleted BDM.\n\nI\u0027m really not sure we have this kind of functional test.\n\nHere, I\u0027m just asking you to add the exact same join, so that would mean that we wouldn\u0027t change the DB queries between before and now.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            \u0027Instance.deleted \u003d\u003d 0)\u0027"},{"line_number":434,"context_line":"        ),"},{"line_number":435,"context_line":"    )"},{"line_number":436,"context_line":"    extra \u003d orm.relationship("},{"line_number":437,"context_line":"        \u0027InstanceExtra\u0027,"},{"line_number":438,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":439,"context_line":"        uselist\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9af286fe_cb225272","line":436,"updated":"2023-09-12 09:44:34.000000000","message":"comes from backref L464 left","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":439,"context_line":"        uselist\u003dFalse,"},{"line_number":440,"context_line":"    )"},{"line_number":441,"context_line":"    info_cache \u003d orm.relationship("},{"line_number":442,"context_line":"        \u0027InstanceInfoCache\u0027,"},{"line_number":443,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":444,"context_line":"        uselist\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"906c6f91_2f17925e","line":441,"updated":"2023-09-12 09:44:34.000000000","message":"comes from backref L440","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"197ad9930ab92264d443f9354cf0df6308ffdd3c","unresolved":true,"context_lines":[{"line_number":441,"context_line":"    info_cache \u003d orm.relationship("},{"line_number":442,"context_line":"        \u0027InstanceInfoCache\u0027,"},{"line_number":443,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":444,"context_line":"        uselist\u003dFalse,"},{"line_number":445,"context_line":"    )"},{"line_number":446,"context_line":"    pci_devices \u003d orm.relationship("},{"line_number":447,"context_line":"        \u0027PciDevice\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b1f6599_4e4123db","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":22},"updated":"2023-04-12 17:19:21.000000000","message":"https://docs.sqlalchemy.org/en/20/orm/relationship_api.html#sqlalchemy.orm.relationship.params.uselist\n\nthis was not covered in your blog\n\nwe are settign this to false to have the reulst returned as a sclaer value.\nthe InstanceInfoCache object https://github.com/openstack/nova/blob/master/nova/objects/instance_info_cache.py#L37-L40 is a a mapping between the instnce uuid and NetworkModelField https://github.com/openstack/nova/blob/ae42400b7663bc58d5562de99e976c95131b77a9/nova/objects/fields.py#L1089\nand the value of that filed is a NetworkInfo object which inherits form list.\nhttps://github.com/openstack/nova/blob/master/nova/network/model.py#L527\n\nthe networkInfo object is seriased as a json blob in the db ad we want to prevent the orm model from trying to automaticaly convert it so we can \n\"hydrate\" the class ourselevs \nhttps://github.com/openstack/nova/blob/master/nova/network/model.py#L540-L544\nhttps://github.com/openstack/nova/blob/ae42400b7663bc58d5562de99e976c95131b77a9/nova/objects/fields.py#L1101-L1107\n\n\nso we need to set uselist\u003dFalse anytime we store a collection a json blob.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4587813c871568f0fa0ce4f59bb0c8ab7ddb5b04","unresolved":false,"context_lines":[{"line_number":441,"context_line":"    info_cache \u003d orm.relationship("},{"line_number":442,"context_line":"        \u0027InstanceInfoCache\u0027,"},{"line_number":443,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":444,"context_line":"        uselist\u003dFalse,"},{"line_number":445,"context_line":"    )"},{"line_number":446,"context_line":"    pci_devices \u003d orm.relationship("},{"line_number":447,"context_line":"        \u0027PciDevice\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e55e36e_95d41dd0","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":22},"in_reply_to":"4b1f6599_4e4123db","updated":"2023-04-13 13:00:34.000000000","message":"Yeah, exactly. I didn\u0027t cover it because it was tangential to what we\u0027re doing here, but that\u0027s the reason exactly. If you drop this, a whole load of tests fail because the info_cache property looks madly different.","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6bfb0e199b267ef1417604dc5d0721395b4b7edd","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            \u0027PciDevice.deleted \u003d\u003d 0)\u0027"},{"line_number":453,"context_line":"        ),"},{"line_number":454,"context_line":"    )"},{"line_number":455,"context_line":"    services \u003d orm.relationship("},{"line_number":456,"context_line":"        \u0027Service\u0027,"},{"line_number":457,"context_line":"        back_populates\u003d\u0027instance\u0027,"},{"line_number":458,"context_line":"        primaryjoin\u003d("}],"source_content_type":"text/x-python","patch_set":1,"id":"37a407da_af871d80","line":455,"updated":"2023-09-12 09:44:34.000000000","message":"comes from the backref L165-left","commit_id":"e14a2b8419ad7f25afd08d4403f38b446a1d3c9c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":true,"context_lines":[{"line_number":475,"context_line":"    security_groups \u003d orm.relationship("},{"line_number":476,"context_line":"        \u0027SecurityGroup\u0027,"},{"line_number":477,"context_line":"        secondary\u003d\u0027security_group_instance_association\u0027,"},{"line_number":478,"context_line":"        back_populates\u003d\u0027instances\u0027,"},{"line_number":479,"context_line":"    )"},{"line_number":480,"context_line":"    system_metadata \u003d orm.relationship("},{"line_number":481,"context_line":"        \u0027InstanceSystemMetadata\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8fc50140_70d090f5","line":478,"updated":"2023-09-13 09:10:04.000000000","message":"yet again, like for bdms, this relationship would differ from the previous behaviour as it would also provide the deleted instances and associations.","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":false,"context_lines":[{"line_number":491,"context_line":"    )"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"# NOTE(stephenfin): https://github.com/sqlalchemy/sqlalchemy/discussions/8619"},{"line_number":495,"context_line":"Instance.metadata \u003d orm.relationship("},{"line_number":496,"context_line":"    \u0027InstanceMetadata\u0027,"},{"line_number":497,"context_line":"    back_populates\u003d\u0027instance\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"11c391d8_fef4c979","line":494,"updated":"2023-09-13 09:10:04.000000000","message":"thanks for the note, I understand why metadata isn\u0027t an object variable.","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":false,"context_lines":[{"line_number":740,"context_line":"    encryption_format \u003d sa.Column(sa.String(128))"},{"line_number":741,"context_line":"    encryption_options \u003d sa.Column(sa.String(4096))"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"# TODO(stephenfin): Remove once we drop the security_groups field from the"},{"line_number":745,"context_line":"# Instance table. Until then, this is tied to the SecurityGroup table"},{"line_number":746,"context_line":"class SecurityGroupInstanceAssociation(BASE, NovaBase, models.SoftDeleteMixin):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9da3d818_11527127","line":743,"updated":"2023-09-13 09:10:04.000000000","message":"unrelated change but meh","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":false,"context_lines":[{"line_number":795,"context_line":"            \u0027SecurityGroupIngressRule.deleted \u003d\u003d 0)\u0027"},{"line_number":796,"context_line":"        ),"},{"line_number":797,"context_line":"        back_populates\u003d\u0027parent_group\u0027,"},{"line_number":798,"context_line":"    )"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"# TODO(stephenfin): Remove once we drop the security_groups field from the"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a236afc_855aa2eb","line":798,"updated":"2023-09-13 09:10:04.000000000","message":"++","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":false,"context_lines":[{"line_number":810,"context_line":"        sa.Integer, sa.ForeignKey(\u0027security_groups.id\u0027))"},{"line_number":811,"context_line":"    parent_group \u003d orm.relationship(\"SecurityGroup\","},{"line_number":812,"context_line":"                                back_populates\u003d\"rules\","},{"line_number":813,"context_line":"                                foreign_keys\u003d[parent_group_id],"},{"line_number":814,"context_line":"                                primaryjoin\u003d\u0027and_(\u0027"},{"line_number":815,"context_line":"        \u0027SecurityGroupIngressRule.parent_group_id \u003d\u003d SecurityGroup.id,\u0027"},{"line_number":816,"context_line":"        \u0027SecurityGroupIngressRule.deleted \u003d\u003d 0)\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"70321a48_ebf78297","line":813,"updated":"2023-09-13 09:10:04.000000000","message":"yeah better to have a list","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aad785e4b87d413ee958be8ea8599a8167c526a7","unresolved":false,"context_lines":[{"line_number":1136,"context_line":"    instance \u003d orm.relationship("},{"line_number":1137,"context_line":"        \u0027Instance\u0027,"},{"line_number":1138,"context_line":"        back_populates\u003d\u0027tags\u0027,"},{"line_number":1139,"context_line":"        foreign_keys\u003dresource_id,"},{"line_number":1140,"context_line":"        primaryjoin\u003d\u0027and_(Tag.resource_id \u003d\u003d Instance.uuid,\u0027"},{"line_number":1141,"context_line":"                    \u0027Instance.deleted \u003d\u003d 0)\u0027,"},{"line_number":1142,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"be47c78c_d18a8aa5","line":1139,"updated":"2023-09-13 09:10:04.000000000","message":"unnecessary move but okay","commit_id":"6526437d40387be3862f8a5b596504157c6a6483"}]}
