)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"447e2aa822906e21efa579bb0af20e2f89a7b590","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-24 10:50:27 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Track host NUMA topology in PCI manager"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For the upcoming \u0027socket\u0027 affinity, the PCI code needs to know the"},{"line_number":10,"context_line":"host\u0027s NUMA topology in order to calculate the socket affinity of PCI"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ebadfd16_73ae1077","line":7,"updated":"2021-02-24 11:08:02.000000000","message":"nit:\n\n  pci: Track ...\n\n?","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"68b98d23cd3d3564aed58cc88acdcb42377b64e6","unresolved":true,"context_lines":[{"line_number":9,"context_line":"For the upcoming `socket` affinity, PCI stats needs to know the"},{"line_number":10,"context_line":"host\u0027s NUMA topology in order to calculate the socket affinity of PCI"},{"line_number":11,"context_line":"devices (based on their \u0027numa_node\u0027). In this patch, the PCI manager"},{"line_number":12,"context_line":"starts using its compute_node parameter to give a NUMA topology to PCI"},{"line_number":13,"context_line":"stats."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"PCI stats needs to track the NUMA topology at the object (not the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"cb91b3f1_caeccd56","line":12,"range":{"start_line":12,"start_character":50,"end_line":12,"end_character":64},"updated":"2021-03-10 12:06:01.000000000","message":"so im pretty tempted to submit a revert for this.\n\nthe pci tracker does nto need the full numa toplogy object it just needs\nthe numa to socket mappings. i would have prefered if that is all we provided.\n\ni also do not like the conversion of the class method to object methods.\nthese filter function were intended to be a pure functions of there inputs\nthey were marked as class method to make sure we could not look at self to get\nextra data that was stashed when the pci tracker was constructed. that is one of\nthe reasons they are called filter. it now means that in testing we have to acount\nfor sideefcts and mock the numa toplogy in the cpi track object or in this case pas it\nin as part of the tracker creation.\n\ni would have strongly preferred if we extended the host numa topology object with a property or funciton that returned the numa to socket map as a dict and we passed that into the filter directly. even if that ment passing it down through several function calls.\n\nwhen we were disussing that chagne in the spec and decied not to modify the pci device objct to store the socket and instead store it in the numa toplogy object i did not think we were goint to modify the pci stats object to contain it.\nif i knew this is what artom was going to do i would have also know this would likely conflict with my port numa series and vdpa seriese and woudl have tired to align them into one long seriese with artom to avoid racing to get tehm merged against each other just before code freeze","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"}],"nova/pci/manager.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c863004b13ef9ad5f735533530b2be6531e2c4b","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":66,"context_line":"        if numa_topology:"},{"line_number":67,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":68,"context_line":"        self.stats \u003d stats.PciDeviceStats(numa_topology,"},{"line_number":69,"context_line":"                                          dev_filter\u003dself.dev_filter)"},{"line_number":70,"context_line":"        self._context \u003d context"},{"line_number":71,"context_line":"        self.pci_devs \u003d objects.PciDeviceList.get_by_compute_node("}],"source_content_type":"text/x-python","patch_set":7,"id":"3bcbde82_f43a81be","line":68,"updated":"2021-02-19 18:23:13.000000000","message":"style nit: could you bring this down to the next line like below?\n\n  self.stats \u003d stats.PciDeviceStats(\n      numa_topology, dev_filter\u003dself.dev_filter)","commit_id":"0a90f57f0dbf01f82a3199de8a647ad0e33f245c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4e1af35e3a67c11af65a6a8ff2ceba79ce3c122a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":66,"context_line":"        if numa_topology:"},{"line_number":67,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":68,"context_line":"        self.stats \u003d stats.PciDeviceStats(numa_topology,"},{"line_number":69,"context_line":"                                          dev_filter\u003dself.dev_filter)"},{"line_number":70,"context_line":"        self._context \u003d context"},{"line_number":71,"context_line":"        self.pci_devs \u003d objects.PciDeviceList.get_by_compute_node("}],"source_content_type":"text/x-python","patch_set":7,"id":"ae66bf26_0215dc75","line":68,"in_reply_to":"3bcbde82_f43a81be","updated":"2021-02-21 14:16:40.000000000","message":"Done","commit_id":"0a90f57f0dbf01f82a3199de8a647ad0e33f245c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c863004b13ef9ad5f735533530b2be6531e2c4b","unresolved":true,"context_lines":[{"line_number":69,"context_line":"                                          dev_filter\u003dself.dev_filter)"},{"line_number":70,"context_line":"        self._context \u003d context"},{"line_number":71,"context_line":"        self.pci_devs \u003d objects.PciDeviceList.get_by_compute_node("},{"line_number":72,"context_line":"                context, node_id)"},{"line_number":73,"context_line":"        self._build_device_tree(self.pci_devs)"},{"line_number":74,"context_line":"        self._initial_instance_usage()"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"2a4e8f63_39f2d180","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":16},"updated":"2021-02-19 18:23:13.000000000","message":"nit","commit_id":"0a90f57f0dbf01f82a3199de8a647ad0e33f245c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4e1af35e3a67c11af65a6a8ff2ceba79ce3c122a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                                          dev_filter\u003dself.dev_filter)"},{"line_number":70,"context_line":"        self._context \u003d context"},{"line_number":71,"context_line":"        self.pci_devs \u003d objects.PciDeviceList.get_by_compute_node("},{"line_number":72,"context_line":"                context, node_id)"},{"line_number":73,"context_line":"        self._build_device_tree(self.pci_devs)"},{"line_number":74,"context_line":"        self._initial_instance_usage()"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b2a06178_62033c60","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":16},"in_reply_to":"2a4e8f63_39f2d180","updated":"2021-02-21 14:16:40.000000000","message":"Done","commit_id":"0a90f57f0dbf01f82a3199de8a647ad0e33f245c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0aea45a5fe0f46bc4b687af759d34e949099dd67","unresolved":true,"context_lines":[{"line_number":69,"context_line":"            self.pci_devs \u003d objects.PciDeviceList.get_by_compute_node("},{"line_number":70,"context_line":"                    context, node_id)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            self.pci_devs \u003d objects.PciDeviceList(objects\u003d[])"},{"line_number":73,"context_line":"        self._build_device_tree(self.pci_devs)"},{"line_number":74,"context_line":"        self._initial_instance_usage()"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1fba4aa3_e58e8960","side":"PARENT","line":72,"updated":"2021-02-24 11:07:24.000000000","message":"This would probably have been better done as a separate precursor patch","commit_id":"db7517d5a8aaa5a24be12d9c3453dcd98d9a887e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0aea45a5fe0f46bc4b687af759d34e949099dd67","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    def __init__(self, context, node_id):"},{"line_number":55,"context_line":"        \"\"\"Create a pci device tracker."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        :param node_id: The compute node\u0027s ID."},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        super(PciDevTracker, self).__init__()"}],"source_content_type":"text/x-python","patch_set":10,"id":"8f4c6eaf_85ee8a96","line":57,"updated":"2021-02-24 11:07:24.000000000","message":"missing \u0027context\u0027 parameter docstring","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"834e2adf835558124a3a57f76cfd05c4bc46cc12","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def __init__(self, context, node_id):"},{"line_number":55,"context_line":"        \"\"\"Create a pci device tracker."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        :param node_id: The compute node\u0027s ID."},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        super(PciDevTracker, self).__init__()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ca4f3a4_39a15c73","line":57,"in_reply_to":"8f4c6eaf_85ee8a96","updated":"2021-03-04 16:42:09.000000000","message":"Done","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0aea45a5fe0f46bc4b687af759d34e949099dd67","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        cn \u003d objects.ComputeNode.get_by_id(context, node_id)"},{"line_number":65,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":66,"context_line":"        if numa_topology:"},{"line_number":67,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":68,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":69,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":70,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":10,"id":"7cb968f6_7f0ab931","line":67,"updated":"2021-02-24 11:07:24.000000000","message":"a comment on why is is necessary would be helpful for readers (it\u0027s because the \u0027ComputeNode\u0027 object stores this a string so we must manually serialize and deserialize when retrieving info)","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"834e2adf835558124a3a57f76cfd05c4bc46cc12","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        cn \u003d objects.ComputeNode.get_by_id(context, node_id)"},{"line_number":65,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":66,"context_line":"        if numa_topology:"},{"line_number":67,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":68,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":69,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":70,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":10,"id":"9dfa6b1d_d3e6f416","line":67,"in_reply_to":"7cb968f6_7f0ab931","updated":"2021-03-04 16:42:09.000000000","message":"Done","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6e590aa60f2259f4175352f4d790f025c52d37ca","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        self.stale \u003d {}"},{"line_number":63,"context_line":"        self.node_id \u003d node_id"},{"line_number":64,"context_line":"        self.dev_filter \u003d whitelist.Whitelist(CONF.pci.passthrough_whitelist)"},{"line_number":65,"context_line":"        cn \u003d objects.ComputeNode.get_by_id(context, node_id)"},{"line_number":66,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."}],"source_content_type":"text/x-python","patch_set":11,"id":"9b4645af_dabd81f7","line":65,"updated":"2021-03-08 11:46:03.000000000","message":"This init is called from nova.compute.resource_tracker.ResourceTracker._setup_pci_tracker where the ComputeNode instance is available. So you can pass the object instead of re-reading it from the db.","commit_id":"e4d1448f347ab58e259d3ec661269ea22f36d9ba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"022d608e39639cf4a68898fcba60571d5a513f79","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.stale \u003d {}"},{"line_number":63,"context_line":"        self.node_id \u003d node_id"},{"line_number":64,"context_line":"        self.dev_filter \u003d whitelist.Whitelist(CONF.pci.passthrough_whitelist)"},{"line_number":65,"context_line":"        cn \u003d objects.ComputeNode.get_by_id(context, node_id)"},{"line_number":66,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."}],"source_content_type":"text/x-python","patch_set":11,"id":"c2f6e9b0_7f955413","line":65,"in_reply_to":"6c0dfc18_1823b5e5","updated":"2021-03-09 13:24:36.000000000","message":"True. Thanks for fixing this.","commit_id":"e4d1448f347ab58e259d3ec661269ea22f36d9ba"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"10979f916302010989292fd85137d9d92c0f3072","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        self.stale \u003d {}"},{"line_number":63,"context_line":"        self.node_id \u003d node_id"},{"line_number":64,"context_line":"        self.dev_filter \u003d whitelist.Whitelist(CONF.pci.passthrough_whitelist)"},{"line_number":65,"context_line":"        cn \u003d objects.ComputeNode.get_by_id(context, node_id)"},{"line_number":66,"context_line":"        numa_topology \u003d cn.numa_topology"},{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."}],"source_content_type":"text/x-python","patch_set":11,"id":"6c0dfc18_1823b5e5","line":65,"in_reply_to":"9b4645af_dabd81f7","updated":"2021-03-08 19:40:10.000000000","message":"This is a very good point, but it makes the previous patch mostly pointless, no? I guess it\u0027s still good to make node_id mandatory to avoid confusion, but the \"real\" reason for doing it was to get the compute node. If the *only* place this is called already has the compute node object, we don\u0027t need the node_id, we can just pass the compute node object directly. In fact, we don\u0027t need to pass node_id at all, we can remove it in favor of compute_node and use compute_node.id instead.","commit_id":"e4d1448f347ab58e259d3ec661269ea22f36d9ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"32e8908ef61042978eff99c767337cdfcbb1b56a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."},{"line_number":69,"context_line":"            # Deserialize it into a real object."},{"line_number":70,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":71,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":72,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":73,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":12,"id":"87db2dff_6898345a","line":70,"updated":"2021-03-09 17:22:22.000000000","message":"We really need to fix this with a 2.0 object...","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63433a19e2fa9bcbc43f45fb7472c55bd510e6ac","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."},{"line_number":69,"context_line":"            # Deserialize it into a real object."},{"line_number":70,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":71,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":72,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":73,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":12,"id":"ae9748fb_5f41e306","line":70,"in_reply_to":"52c24705_e65523f9","updated":"2021-03-10 12:16:41.000000000","message":"yes we could and we should but im just saying we dont have to wait to start using it in code as an object if we want too.\n\nwhat is the critira for going to 2.0 anyway?\n\nshould we be doing this as part of the 6.0 RPC version bump that sylvain is working on.\n\nif we need to wait for an rpc bump and cahng do this next cycle then i think we should try to do this this cycle.","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"68b98d23cd3d3564aed58cc88acdcb42377b64e6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."},{"line_number":69,"context_line":"            # Deserialize it into a real object."},{"line_number":70,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":71,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":72,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":73,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":12,"id":"6de24377_749dfe21","line":70,"in_reply_to":"5d3d08ed_3b3de5a3","updated":"2021-03-10 12:06:01.000000000","message":"by the way if you just want the compute node object have it already deserialsed into a NUMATopology object then yes we shoudl do that instead of having a jsob blob in memory i dont think tha tneed to wait for a v2.0 object however we can just add a porpety on the object to do the conversion.\ne.g\n\n@property\ndef numa(self)\n  return objects.NUMATopology.obj_from_db_obj(self.numa_topology)\n\nwe can add a setter\n\nthen peopel can just use compute_node.numa instead\n\nthough that has the same problem that this has namely we are using a copy of the numa toplogy object form the compute  node object this is not a refereence so that mean the pci tracker will be operating on an out of data version that wont be updated when vms are booted.\n\nwe are not using that info today but that does not mean someoen wont try to in the future assuming the object is up to date. i would have at least wanted a comment calling this out or better yet store a dict mapping the numa nodes to sockets here which is the only info we actully need. that wont change over the lifetime of the compute service porcess so we can safely generate that once and pass it in without having stale data.","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"378c71008574327a6b3890ead9d37ced9a1f43e1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."},{"line_number":69,"context_line":"            # Deserialize it into a real object."},{"line_number":70,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":71,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":72,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":73,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":12,"id":"52c24705_e65523f9","line":70,"in_reply_to":"6de24377_749dfe21","updated":"2021-03-10 12:08:09.000000000","message":"\u003e this is intentionally stored as a json blob becuase we did not want ti to be an object so it could evolve without a db scema change. so that was intentional\n\nRight, but you can store an object in a TEXT field and still have o.vo automatically deserialize it for you when you pull it out. We would need to change:\n\n  \u0027numa_topology\u0027: fields.StringField(nullable\u003dTrue),\n\nto:\n\n  \u0027numa_topology\u0027: fields.ObjectField(\u0027NUMATopology\u0027, nullable\u003dTrue),\n\nin the o.vo definition.","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"208f3d521becabed9d2ea3c7396130765212e5c7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if numa_topology:"},{"line_number":68,"context_line":"            # For legacy reasons, the NUMATopology is stored as a JSON blob."},{"line_number":69,"context_line":"            # Deserialize it into a real object."},{"line_number":70,"context_line":"            numa_topology \u003d objects.NUMATopology.obj_from_db_obj(numa_topology)"},{"line_number":71,"context_line":"        self.stats \u003d stats.PciDeviceStats("},{"line_number":72,"context_line":"            numa_topology, dev_filter\u003dself.dev_filter)"},{"line_number":73,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":12,"id":"5d3d08ed_3b3de5a3","line":70,"in_reply_to":"87db2dff_6898345a","updated":"2021-03-09 20:50:06.000000000","message":"this is intentionally stored as a json blob becuase we did not want ti to be an object so it could evolve without a db scema change. so that was intentional","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"}],"nova/pci/stats.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"68b98d23cd3d3564aed58cc88acdcb42377b64e6","unresolved":true,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, numa_topology, stats\u003dNone, dev_filter\u003dNone):"},{"line_number":58,"context_line":"        super(PciDeviceStats, self).__init__()"},{"line_number":59,"context_line":"        self.numa_topology \u003d numa_topology"},{"line_number":60,"context_line":"        # NOTE(sbauza): Stats are a PCIDevicePoolList object"},{"line_number":61,"context_line":"        self.pools \u003d [pci_pool.to_dict()"},{"line_number":62,"context_line":"                      for pci_pool in stats] if stats else []"}],"source_content_type":"text/x-python","patch_set":12,"id":"82d38d84_047022eb","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":42},"updated":"2021-03-10 12:06:01.000000000","message":"luckally this will not be included in the database entry\nhttps://github.com/openstack/nova/blob/ab07507e5cfce6232fef373d07ff92ea704541da/nova/pci/stats.py#L499-L517\n\nto_device_pools_obj is what generates the PciDevicePoolList object that is stored in the db by useing __iter__ which iterates over the pools part of my concern with this was acidentally storing this into the db as part of the stats but we wont.","commit_id":"890b6d54a6f885cb6dd032dbf8186116df14eb6b"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0aea45a5fe0f46bc4b687af759d34e949099dd67","unresolved":true,"context_lines":[{"line_number":1282,"context_line":"                return_value\u003d_COMPUTE_NODE_FIXTURES[0])"},{"line_number":1283,"context_line":"    def test_no_op_init_compute_node(self, cn_get_by_id_mock, update_mock,"},{"line_number":1284,"context_line":"                                     get_mock, service_mock, create_mock,"},{"line_number":1285,"context_line":"                                     pci_mock):"},{"line_number":1286,"context_line":"        self._setup_rt()"},{"line_number":1287,"context_line":""},{"line_number":1288,"context_line":"        resources \u003d copy.deepcopy(_VIRT_DRIVER_AVAIL_RESOURCES)"}],"source_content_type":"text/x-python","patch_set":10,"id":"b90d4e9d_73333c41","line":1285,"updated":"2021-02-24 11:07:24.000000000","message":"style nit:\n\n  def test_no_op_init_compute_node(\n      self, cn_get_by_id_mock, update_mock, get_mock, service_mock,\n      create_mock, pci_mock,\n  ):\n\nwould avoid the crazy hanging indent. Below and in other files also","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"834e2adf835558124a3a57f76cfd05c4bc46cc12","unresolved":false,"context_lines":[{"line_number":1282,"context_line":"                return_value\u003d_COMPUTE_NODE_FIXTURES[0])"},{"line_number":1283,"context_line":"    def test_no_op_init_compute_node(self, cn_get_by_id_mock, update_mock,"},{"line_number":1284,"context_line":"                                     get_mock, service_mock, create_mock,"},{"line_number":1285,"context_line":"                                     pci_mock):"},{"line_number":1286,"context_line":"        self._setup_rt()"},{"line_number":1287,"context_line":""},{"line_number":1288,"context_line":"        resources \u003d copy.deepcopy(_VIRT_DRIVER_AVAIL_RESOURCES)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a0d27f79_a102e86c","line":1285,"in_reply_to":"b90d4e9d_73333c41","updated":"2021-03-04 16:42:09.000000000","message":"Done","commit_id":"8243e3cc49bbb0d6697acb350e09192650a623ca"}]}
