)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4eecad768e6350777478c13ad4a8ce525eb51c42","unresolved":true,"context_lines":[{"line_number":11,"context_line":"lazy-load something zero or one times where it makes sense for"},{"line_number":12,"context_line":"easier optimization. However, because this \u0027works so well\u0027 we end up"},{"line_number":13,"context_line":"lazy-loading more things than we expect."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie379239c5de795ba8acc281da9208b3a10e92da0"},{"line_number":16,"context_line":"NOTE: This should probably be less strict before merge."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2494c77f_2099039f","line":14,"updated":"2023-08-21 09:22:35.000000000","message":"What was the reason behind decorating these objects and not all of our objects? Is it expensive to have the decorator on all of them?","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0a9aa428898f575a9696d85148cce2b4e2a4989","unresolved":true,"context_lines":[{"line_number":11,"context_line":"lazy-load something zero or one times where it makes sense for"},{"line_number":12,"context_line":"easier optimization. However, because this \u0027works so well\u0027 we end up"},{"line_number":13,"context_line":"lazy-loading more things than we expect."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie379239c5de795ba8acc281da9208b3a10e92da0"},{"line_number":16,"context_line":"NOTE: This should probably be less strict before merge."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"b70392ee_ab56f608","line":14,"in_reply_to":"2494c77f_2099039f","updated":"2023-08-21 13:48:45.000000000","message":"I\u0027m adding it to all the objects that have loaders. The ones that don\u0027t have nothing to decorate. Are there some that do lazy loads that I missed?","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef66a9321991b8d66d84c1af2187a604603a3e24","unresolved":false,"context_lines":[{"line_number":11,"context_line":"lazy-load something zero or one times where it makes sense for"},{"line_number":12,"context_line":"easier optimization. However, because this \u0027works so well\u0027 we end up"},{"line_number":13,"context_line":"lazy-loading more things than we expect."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie379239c5de795ba8acc281da9208b3a10e92da0"},{"line_number":16,"context_line":"NOTE: This should probably be less strict before merge."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"b8126938_56817782","line":14,"in_reply_to":"b70392ee_ab56f608","updated":"2023-08-21 15:18:15.000000000","message":"Oh good point. Thanks for explaining it.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1b9635d21af7925d0b7d5616aa5bb65300e3f665","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bfc78025_73ea0cd9","updated":"2023-08-15 00:34:50.000000000","message":"I think this is a cool idea. +1 because I assume the NOTE in the commit message is about what to choose for the threshold. We also might want to log the warning every N times as once lazy load goes over the threshold, currently it will log every time thereafter.","commit_id":"66fcdded726b89f7dfb21775265050426c5e99ef"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bb3bcee5882377b16bdbe1e78c0c7caabb963469","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fc3f6ed8_0c7b8774","in_reply_to":"bfc78025_73ea0cd9","updated":"2023-08-15 14:05:51.000000000","message":"My goal here is to eliminate as many of the lazy-loads as possible, as we have done in the past. Most of these have crept in because people don\u0027t have to think about whether or not they\u0027re available, they just use them.\n\nThe patches after this squash these down to zero or one. I think things like fault make sense to lazy-load, and certain things where only one path will end up needing something. So I think warning every time past the threshold just makes it easier to notice and fix these things before we let them creep in. Like, I was even thinking of a post action that greps the logs for these over-threshold warnings and fails the job if you add something that goes over...","commit_id":"66fcdded726b89f7dfb21775265050426c5e99ef"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4eecad768e6350777478c13ad4a8ce525eb51c42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2cd56d87_1ad60c4b","updated":"2023-08-21 09:22:35.000000000","message":"I\u0027m -1 only because my question on the selection of the objects we added the decorator on. Otherwise this looks good.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef66a9321991b8d66d84c1af2187a604603a3e24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6a40d3d1_75f7b1dc","updated":"2023-08-21 15:18:15.000000000","message":"Looks good to me.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"094d2bb7781238fdc730363cc67d2f0b3fb486aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"26932e5c_756bf31f","updated":"2023-08-21 15:22:59.000000000","message":"ill try and review this today/tommorow\nping me if i dont","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"da53d0da3c118328ff0ddff96cba84d1fcb8aff8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ca94e44a_15468f4a","updated":"2023-08-21 15:25:59.000000000","message":"I just changed this to log at debug and remove the note from the commit message so we can go ahead and merge this. We can raise the threshold later before the release if we want to.","commit_id":"9622800e7a2f896172345ee9d06b8a6ba03df1bf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a3824cf21d6e62200ba5ea4cbb684ded52bcfe7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"64b79ba5_8defadca","updated":"2023-08-21 18:16:25.000000000","message":"recheck volume resize failed test","commit_id":"b9fe87ddeee845d21312eb42c4dca70773fb4d3b"}],"nova/objects/base.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1b9635d21af7925d0b7d5616aa5bb65300e3f665","unresolved":true,"context_lines":[{"line_number":111,"context_line":"            self._lazy_load_counter +\u003d 1"},{"line_number":112,"context_line":"            if self._lazy_load_counter \u003e 1:"},{"line_number":113,"context_line":"                LOG.warning(\u0027Object lazy-loaded %i attributes: %s\u0027,"},{"line_number":114,"context_line":"                            self._lazy_load_counter, self)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    return wrapper"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"97f550d4_2ab2506c","line":114,"updated":"2023-08-15 00:34:50.000000000","message":"Wouldn\u0027t we also want to log the attrname?","commit_id":"66fcdded726b89f7dfb21775265050426c5e99ef"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"401676b5b22066b29535fe5bd941c0ddb0418011","unresolved":true,"context_lines":[{"line_number":111,"context_line":"            self._lazy_load_counter +\u003d 1"},{"line_number":112,"context_line":"            if self._lazy_load_counter \u003e 1:"},{"line_number":113,"context_line":"                LOG.warning(\u0027Object lazy-loaded %i attributes: %s\u0027,"},{"line_number":114,"context_line":"                            self._lazy_load_counter, self)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    return wrapper"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cc26eb1d_a45e09f1","line":114,"in_reply_to":"97f550d4_2ab2506c","updated":"2023-08-15 13:30:40.000000000","message":"Sure, we log it in instance\u0027s load already so it would be a bit duplicative. Knowing what the Nth attribute was that triggered this might be helpful, but maybe not.\n\nI guess I could also just stack the attrnames in a list and use that for the threshold and the printing...","commit_id":"66fcdded726b89f7dfb21775265050426c5e99ef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"085c1baf50814f70b064d8b4871b6abe22671260","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            self._lazy_load_counter +\u003d 1"},{"line_number":112,"context_line":"            if self._lazy_load_counter \u003e 1:"},{"line_number":113,"context_line":"                LOG.warning(\u0027Object lazy-loaded %i attributes: %s\u0027,"},{"line_number":114,"context_line":"                            self._lazy_load_counter, self)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    return wrapper"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5be57f4d_e463311d","line":114,"in_reply_to":"cc26eb1d_a45e09f1","updated":"2023-08-21 16:15:43.000000000","message":"Done dan is now building a list in  the current patch set\n\nim just going to clean up these stale comments then ill do a review","commit_id":"66fcdded726b89f7dfb21775265050426c5e99ef"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4eecad768e6350777478c13ad4a8ce525eb51c42","unresolved":true,"context_lines":[{"line_number":108,"context_line":"    elif \u0027id\u0027 in obj:"},{"line_number":109,"context_line":"        ident \u003d obj.id"},{"line_number":110,"context_line":"    else:"},{"line_number":111,"context_line":"        ident \u003d \u0027anonymous\u0027"},{"line_number":112,"context_line":"    return \u0027%s\u003c%s\u003e\u0027 % (obj.obj_name(), ident)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4cb9af42_9742218e","line":111,"updated":"2023-08-21 09:22:35.000000000","message":"This feels a bit strange but I realized that we don\u0027t have a generic way to identify an object. Maybe we can improve that later independently from this. One way to do this would be to enforce that all our objects can generate a proper string representation of itself. Then here we would just print that string representation.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef66a9321991b8d66d84c1af2187a604603a3e24","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    elif \u0027id\u0027 in obj:"},{"line_number":109,"context_line":"        ident \u003d obj.id"},{"line_number":110,"context_line":"    else:"},{"line_number":111,"context_line":"        ident \u003d \u0027anonymous\u0027"},{"line_number":112,"context_line":"    return \u0027%s\u003c%s\u003e\u0027 % (obj.obj_name(), ident)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"125312ed_2096e6fd","line":111,"in_reply_to":"355f5c92_e340651d","updated":"2023-08-21 15:18:15.000000000","message":"OK that make sense.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0a9aa428898f575a9696d85148cce2b4e2a4989","unresolved":true,"context_lines":[{"line_number":108,"context_line":"    elif \u0027id\u0027 in obj:"},{"line_number":109,"context_line":"        ident \u003d obj.id"},{"line_number":110,"context_line":"    else:"},{"line_number":111,"context_line":"        ident \u003d \u0027anonymous\u0027"},{"line_number":112,"context_line":"    return \u0027%s\u003c%s\u003e\u0027 % (obj.obj_name(), ident)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"355f5c92_e340651d","line":111,"in_reply_to":"4cb9af42_9742218e","updated":"2023-08-21 13:48:45.000000000","message":"Well, we do have that generic routine, it serializes the object in a readable form. For objects that are just used as sub-objects, I\u0027m not sure we ever really need to have an identifier, and the same goes for a transient object we just send over the wire but never persist. Aside from maybe correlating that transient object on either side of an RPC message, there\u0027s not really anything to compare it to, and the request-id works well for that case anyway.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bc125db6b47e40c74063f0797fe4d5fb9000d786","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                self._lazy_loads \u003d []"},{"line_number":124,"context_line":"            self._lazy_loads.append(attrname)"},{"line_number":125,"context_line":"            if len(self._lazy_loads) \u003e 1:"},{"line_number":126,"context_line":"                LOG.warning(\u0027Object %s lazy-loaded attributes: %s\u0027,"},{"line_number":127,"context_line":"                            object_id(self), \u0027,\u0027.join(self._lazy_loads))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":2,"id":"917dc063_c0e9092e","line":126,"updated":"2023-08-15 14:28:09.000000000","message":"If I had one nit, it would be the level of the log. Warning is reserved for something that operators are expected to pay attention to, whereas this is just for developers, the oprators are powerless to do anything about it.","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"085c1baf50814f70b064d8b4871b6abe22671260","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                self._lazy_loads \u003d []"},{"line_number":124,"context_line":"            self._lazy_loads.append(attrname)"},{"line_number":125,"context_line":"            if len(self._lazy_loads) \u003e 1:"},{"line_number":126,"context_line":"                LOG.warning(\u0027Object %s lazy-loaded attributes: %s\u0027,"},{"line_number":127,"context_line":"                            object_id(self), \u0027,\u0027.join(self._lazy_loads))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":2,"id":"22c5c01c_8f739a3b","line":126,"in_reply_to":"6c1d4215_9fdf5652","updated":"2023-08-21 16:15:43.000000000","message":"Done","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"504aaf2863b88d6581e554568a4c9e5bf2112b08","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                self._lazy_loads \u003d []"},{"line_number":124,"context_line":"            self._lazy_loads.append(attrname)"},{"line_number":125,"context_line":"            if len(self._lazy_loads) \u003e 1:"},{"line_number":126,"context_line":"                LOG.warning(\u0027Object %s lazy-loaded attributes: %s\u0027,"},{"line_number":127,"context_line":"                            object_id(self), \u0027,\u0027.join(self._lazy_loads))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":2,"id":"6c1d4215_9fdf5652","line":126,"in_reply_to":"917dc063_c0e9092e","updated":"2023-08-15 14:33:20.000000000","message":"Yeah, I\u0027m logging at warning to be able to spot these easier in the zuul log dumps. I intend to make it debug for the reasons you mention once I remove the NOTE from the commit message (and thus before merge).","commit_id":"ec85614d02137610af5ee24249a94c48a7dd704d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9a9bd0ef78badc3b6c813ff4a8e048acf6144baa","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            self._lazy_loads.append(attrname)"},{"line_number":125,"context_line":"            if len(self._lazy_loads) \u003e 1:"},{"line_number":126,"context_line":"                LOG.debug(\u0027Object %s lazy-loaded attributes: %s\u0027,"},{"line_number":127,"context_line":"                          object_id(self), \u0027,\u0027.join(self._lazy_loads))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    return wrapper"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"cd52058f_d89aeb38","line":127,"updated":"2023-08-21 15:28:52.000000000","message":"```\nAug 15 15:03:56.305616 np0034951477 nova-compute[84149]: WARNING nova.objects.base [None req-065bf150-65da-4eb6-9b65-16597d54b12f demo admin] Object Instance\u003c7d6d59d5-1d69-4911-b607-5d6492c221b7\u003e lazy-loaded attributes: pci_requests,resources,numa_topology,pci_devices,trusted_certs,vcpu_model: NotImplementedError\n```\n\nWondering what is that last NotImplementedError at the end of the log line.\n\nhttps://zuul.opendev.org/t/openstack/build/931b90ba391d44d9acf926a75e0c0496/log/controller/logs/screen-n-cpu.txt#14822\n\n(This is not a blocker to me to land this, just pointing it out as it might be a bug in our lazy-load codepath)","commit_id":"54376c0be66bbdea98bc145e038c905d4993ab55"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"085c1baf50814f70b064d8b4871b6abe22671260","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            self._lazy_loads.append(attrname)"},{"line_number":125,"context_line":"            if len(self._lazy_loads) \u003e 1:"},{"line_number":126,"context_line":"                LOG.debug(\u0027Object %s lazy-loaded attributes: %s\u0027,"},{"line_number":127,"context_line":"                          object_id(self), \u0027,\u0027.join(self._lazy_loads))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    return wrapper"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8ff5d858_c56194fa","line":127,"in_reply_to":"5145979c_778adc9e","updated":"2023-08-21 16:15:43.000000000","message":"hum ok this is weird but i think tis something we can dig into after this initial patch.","commit_id":"54376c0be66bbdea98bc145e038c905d4993ab55"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"67f96c96df80d3c952579a5a3c524ae9c1a5e0e5","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            self._lazy_loads.append(attrname)"},{"line_number":125,"context_line":"            if len(self._lazy_loads) \u003e 1:"},{"line_number":126,"context_line":"                LOG.debug(\u0027Object %s lazy-loaded attributes: %s\u0027,"},{"line_number":127,"context_line":"                          object_id(self), \u0027,\u0027.join(self._lazy_loads))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    return wrapper"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5145979c_778adc9e","line":127,"in_reply_to":"cd52058f_d89aeb38","updated":"2023-08-21 15:39:38.000000000","message":"Yeah I\u0027ve noticed this as well and haven\u0027t tracked it down. It actually almost seems like it might be a bug in the logging and not even the loading (since this is only happening in loaders that *don\u0027t* raise NotImplementedError).","commit_id":"54376c0be66bbdea98bc145e038c905d4993ab55"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7456824545b316b3aae8df819e717dd64fcab884","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    # of the object that goes over the wire, so it is limited to a single"},{"line_number":148,"context_line":"    # service, which is fine for what we need."},{"line_number":149,"context_line":"    _lazy_loads \u003d None"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    # NOTE(ndipanov): This is nova-specific"},{"line_number":152,"context_line":"    @staticmethod"},{"line_number":153,"context_line":"    def should_migrate_data():"}],"source_content_type":"text/x-python","patch_set":5,"id":"b5ed0d55_3007605f","line":150,"updated":"2023-08-21 16:23:07.000000000","message":"ack","commit_id":"b9fe87ddeee845d21312eb42c4dca70773fb4d3b"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7456824545b316b3aae8df819e717dd64fcab884","unresolved":true,"context_lines":[{"line_number":801,"context_line":"        obj.obj_load_attr(\u0027bar\u0027)"},{"line_number":802,"context_line":"        mock_log.assert_not_called()"},{"line_number":803,"context_line":"        self.assertEqual([\u0027bar\u0027], obj._lazy_loads)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        obj.obj_load_attr(\u0027bar\u0027)"},{"line_number":806,"context_line":"        mock_log.assert_called_once_with("},{"line_number":807,"context_line":"            \u0027Object %s lazy-loaded attributes: %s\u0027, \u0027MyObj\u003canonymous\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"d5dc868d_c5a3eff7","line":804,"updated":"2023-08-21 16:23:07.000000000","message":"nit: a momment here explainign why this only logs on the second call would be nice\n\ni understand this now but it took a few readings to rememeber that we only logged if we lazy load more then once.\n\nthe test is correct however so its only a nit.","commit_id":"b9fe87ddeee845d21312eb42c4dca70773fb4d3b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d2a42efb9d459b60baaee83a6686a770816b7fb5","unresolved":true,"context_lines":[{"line_number":801,"context_line":"        obj.obj_load_attr(\u0027bar\u0027)"},{"line_number":802,"context_line":"        mock_log.assert_not_called()"},{"line_number":803,"context_line":"        self.assertEqual([\u0027bar\u0027], obj._lazy_loads)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        obj.obj_load_attr(\u0027bar\u0027)"},{"line_number":806,"context_line":"        mock_log.assert_called_once_with("},{"line_number":807,"context_line":"            \u0027Object %s lazy-loaded attributes: %s\u0027, \u0027MyObj\u003canonymous\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"2ae0513d_5a86d4bb","line":804,"in_reply_to":"d5dc868d_c5a3eff7","updated":"2023-08-21 16:27:40.000000000","message":"Ack, I\u0027ll update it if I have to respin again.","commit_id":"b9fe87ddeee845d21312eb42c4dca70773fb4d3b"}]}
