)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6de907587deae68460335ceaf21d84fe44cb5d1d","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This is rather tricky to resolve. In most cases, we can simply make use"},{"line_number":20,"context_line":"of getattr to fetch the class-bound attribute, however, there are a"},{"line_number":21,"context_line":"number of places were we were doing \"nested\" joins, e.g."},{"line_number":22,"context_line":"\u0027instances.info_cache\u0027 on the \u0027SecurityGroup\u0027 model. These need a little"},{"line_number":23,"context_line":"more thought."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I1355ac92202cb504a7814afaa1338a4a511f9b54"},{"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":"8cd2cfc5_76c3489f","line":23,"range":{"start_line":21,"start_character":52,"end_line":23,"end_character":13},"updated":"2022-04-20 14:46:16.000000000","message":"yeah, I was a bit afraid by this hack you used, but I understand the situation, so I\u0027ll +2 it and we could modify this after if we want.","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64598c70366f6a242c5562e29a1994fa979d67bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"392e04fa_a83a9d8b","updated":"2022-04-20 10:15:07.000000000","message":"Looks good","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24fdedd42cc2e1c043404943827281391388fe4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"97e9dc86_2a9c5d91","updated":"2022-04-14 14:10:08.000000000","message":"recheck gate post failure","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfaf6706f8529f9516e07bfe12ad304df6446219","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a856557d_b37bfad2","updated":"2022-04-13 09:11:32.000000000","message":"recheck unrelated failure in functional tests","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"}],"nova/db/main/api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64598c70366f6a242c5562e29a1994fa979d67bc","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        ).joinedload("},{"line_number":94,"context_line":"            Instance.info_cache"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    elements \u003d column.split(\u0027.\u0027)"},{"line_number":98,"context_line":"    relationship_attr \u003d getattr(lead_entity, elements.pop(0))"},{"line_number":99,"context_line":"    joined \u003d orm.joinedload(relationship_attr)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6c0fdd2_96a7840e","line":96,"updated":"2022-04-20 10:15:07.000000000","message":"Thanks for the example, this helps a lot.","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6de907587deae68460335ceaf21d84fe44cb5d1d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        ).joinedload("},{"line_number":94,"context_line":"            Instance.info_cache"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    elements \u003d column.split(\u0027.\u0027)"},{"line_number":98,"context_line":"    relationship_attr \u003d getattr(lead_entity, elements.pop(0))"},{"line_number":99,"context_line":"    joined \u003d orm.joinedload(relationship_attr)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0229772c_8a4b1a0e","line":96,"in_reply_to":"b6c0fdd2_96a7840e","updated":"2022-04-20 14:46:16.000000000","message":"Agreed.","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64598c70366f6a242c5562e29a1994fa979d67bc","unresolved":false,"context_lines":[{"line_number":1434,"context_line":"        orm.joinedload("},{"line_number":1435,"context_line":"            models.Instance.security_groups"},{"line_number":1436,"context_line":"        ).joinedload(models.SecurityGroup.rules)"},{"line_number":1437,"context_line":"    ).options(orm.joinedload(models.Instance.info_cache))"},{"line_number":1438,"context_line":"    if columns_to_join is None:"},{"line_number":1439,"context_line":"        columns_to_join \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027]"},{"line_number":1440,"context_line":"    for column in columns_to_join:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ce400f52_f7b0ee16","line":1437,"updated":"2022-04-20 10:15:07.000000000","message":"I would say this is better than the magic in _joinedload_all","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4f1dfcc299e2b23b1f26f82fd6b62242032514cc","unresolved":false,"context_lines":[{"line_number":1434,"context_line":"        orm.joinedload("},{"line_number":1435,"context_line":"            models.Instance.security_groups"},{"line_number":1436,"context_line":"        ).joinedload(models.SecurityGroup.rules)"},{"line_number":1437,"context_line":"    ).options(orm.joinedload(models.Instance.info_cache))"},{"line_number":1438,"context_line":"    if columns_to_join is None:"},{"line_number":1439,"context_line":"        columns_to_join \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027]"},{"line_number":1440,"context_line":"    for column in columns_to_join:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bef20dff_dbdda057","line":1437,"in_reply_to":"ce400f52_f7b0ee16","updated":"2022-04-20 15:52:29.000000000","message":"Totally, and I tried to replace \u0027_joinedload_all\u0027 with this everywhere. However, there was one final user - security_group_get - which has multiple types of column, making it very difficult to replace there. The best I could do was a large if-else statement or embedding \u0027_joinedload_all\u0027 there. Neither seemed better 😞","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6de907587deae68460335ceaf21d84fe44cb5d1d","unresolved":true,"context_lines":[{"line_number":1699,"context_line":"    query_prefix \u003d context.session.query(models.Instance)"},{"line_number":1700,"context_line":"    for column in columns_to_join_new:"},{"line_number":1701,"context_line":"        if \u0027extra.\u0027 in column:"},{"line_number":1702,"context_line":"            column_ref \u003d getattr(models.InstanceExtra, column.split(\u0027.\u0027)[1])"},{"line_number":1703,"context_line":"            query_prefix \u003d query_prefix.options("},{"line_number":1704,"context_line":"                orm.joinedload(models.Instance.extra).undefer(column_ref)"},{"line_number":1705,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5f8ce9e_43082441","line":1702,"range":{"start_line":1702,"start_character":55,"end_line":1702,"end_character":75},"updated":"2022-04-20 14:46:16.000000000","message":"well, not sure I like this but OK.","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4f1dfcc299e2b23b1f26f82fd6b62242032514cc","unresolved":false,"context_lines":[{"line_number":1699,"context_line":"    query_prefix \u003d context.session.query(models.Instance)"},{"line_number":1700,"context_line":"    for column in columns_to_join_new:"},{"line_number":1701,"context_line":"        if \u0027extra.\u0027 in column:"},{"line_number":1702,"context_line":"            column_ref \u003d getattr(models.InstanceExtra, column.split(\u0027.\u0027)[1])"},{"line_number":1703,"context_line":"            query_prefix \u003d query_prefix.options("},{"line_number":1704,"context_line":"                orm.joinedload(models.Instance.extra).undefer(column_ref)"},{"line_number":1705,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"0cb917e2_0957a574","line":1702,"range":{"start_line":1702,"start_character":55,"end_line":1702,"end_character":75},"in_reply_to":"e5f8ce9e_43082441","updated":"2022-04-20 15:52:29.000000000","message":"The only way we could avoid this is to update all the callers to provide a list of SQLA Column objects in \u0027columns_to_join\u0027 rather than strings as we do now. That\u0027s a *lot* of work that I wanted to avoid for now 😉","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6de907587deae68460335ceaf21d84fe44cb5d1d","unresolved":true,"context_lines":[{"line_number":2095,"context_line":""},{"line_number":2096,"context_line":"    for column in columns_to_join_new:"},{"line_number":2097,"context_line":"        if \u0027extra.\u0027 in column:"},{"line_number":2098,"context_line":"            column_ref \u003d getattr(models.InstanceExtra, column.split(\u0027.\u0027)[1])"},{"line_number":2099,"context_line":"            query \u003d query.options("},{"line_number":2100,"context_line":"                orm.joinedload(models.Instance.extra).undefer(column_ref)"},{"line_number":2101,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"291b7428_a5a21a2b","line":2098,"range":{"start_line":2098,"start_character":55,"end_line":2098,"end_character":75},"updated":"2022-04-20 14:46:16.000000000","message":"ditto, seems a hack.","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4f1dfcc299e2b23b1f26f82fd6b62242032514cc","unresolved":false,"context_lines":[{"line_number":2095,"context_line":""},{"line_number":2096,"context_line":"    for column in columns_to_join_new:"},{"line_number":2097,"context_line":"        if \u0027extra.\u0027 in column:"},{"line_number":2098,"context_line":"            column_ref \u003d getattr(models.InstanceExtra, column.split(\u0027.\u0027)[1])"},{"line_number":2099,"context_line":"            query \u003d query.options("},{"line_number":2100,"context_line":"                orm.joinedload(models.Instance.extra).undefer(column_ref)"},{"line_number":2101,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"523daee5_3ac250d1","line":2098,"range":{"start_line":2098,"start_character":55,"end_line":2098,"end_character":75},"in_reply_to":"291b7428_a5a21a2b","updated":"2022-04-20 15:52:29.000000000","message":"As above","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64598c70366f6a242c5562e29a1994fa979d67bc","unresolved":false,"context_lines":[{"line_number":3150,"context_line":""},{"line_number":3151,"context_line":"@require_context"},{"line_number":3152,"context_line":"@pick_context_manager_writer"},{"line_number":3153,"context_line":"def security_group_update(context, security_group_id, values):"},{"line_number":3154,"context_line":"    \"\"\"Update a security group.\"\"\""},{"line_number":3155,"context_line":"    query \u003d model_query(context, models.SecurityGroup).filter_by("},{"line_number":3156,"context_line":"        id\u003dsecurity_group_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0d2ed701_38e712d4","line":3153,"updated":"2022-04-20 10:15:07.000000000","message":"OK columns_to_join is unused.","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"}],"nova/tests/fixtures/nova.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6de907587deae68460335ceaf21d84fe44cb5d1d","unresolved":true,"context_lines":[{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        warnings.filterwarnings("},{"line_number":907,"context_line":"            \u0027ignore\u0027,"},{"line_number":908,"context_line":"            module\u003d\u0027nova\u0027,"},{"line_number":909,"context_line":"            message\u003dr\u0027Invoking and_\\(\\) without arguments is deprecated, .*\u0027,"},{"line_number":910,"context_line":"            category\u003dsqla_exc.SADeprecationWarning)"},{"line_number":911,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"45bd00a2_703063eb","side":"PARENT","line":908,"updated":"2022-04-20 14:46:16.000000000","message":"wooohoo","commit_id":"523297bdfa25bb0ddadc2320595c6b859be5e192"}],"nova/tests/unit/db/main/test_api.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6de907587deae68460335ceaf21d84fe44cb5d1d","unresolved":true,"context_lines":[{"line_number":169,"context_line":"    def test_joinedload_helper(self, mock_jl):"},{"line_number":170,"context_line":"        query \u003d db._joinedload_all("},{"line_number":171,"context_line":"            models.SecurityGroup, \u0027instances.info_cache\u0027"},{"line_number":172,"context_line":"        )"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # We call sqlalchemy.orm.joinedload() on the first element"},{"line_number":175,"context_line":"        mock_jl.assert_called_once_with(models.SecurityGroup.instances)"}],"source_content_type":"text/x-python","patch_set":1,"id":"158bda2b_6e8d4cac","line":172,"updated":"2022-04-20 14:46:16.000000000","message":"+1000 !","commit_id":"0939b3c4d17c5c810c3a38f89db263d7b933e477"}]}
