)]}'
{"nova/pci/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a33fd5a367c010c8664f95eb5d89ef6538d175c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        # NOTE(ndipanov): Removed devs are pruned from self.pci_devs on save()"},{"line_number":136,"context_line":"        # so we need to make sure we are not looking at removed ones as we may"},{"line_number":137,"context_line":"        # build up the tree sooner than they are pruned."},{"line_number":138,"context_line":"        active_devs \u003d [dev for dev in self.all_devs"},{"line_number":139,"context_line":"                       if dev.status not in (fields.PciDeviceStatus.REMOVED,"},{"line_number":140,"context_line":"                                             fields.PciDeviceStatus.DELETED)]"},{"line_number":141,"context_line":"        children \u003d collections.defaultdict(list)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_7582ffc9","line":138,"range":{"start_line":138,"start_character":38,"end_line":138,"end_character":51},"updated":"2016-04-08 20:06:18.000000000","message":":( I had to look up that this was a property that returned self.pci_devs which is set in __init__ right before this build method is called. Can we please just pass self.pci_devs to this method so we don\u0027t have all of this tight-coupling? Then we could also make this a static method I think.","commit_id":"d7331305261b0e5f3a34a5080efa494116ca2676"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a33fd5a367c010c8664f95eb5d89ef6538d175c","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        active_devs \u003d [dev for dev in self.all_devs"},{"line_number":139,"context_line":"                       if dev.status not in (fields.PciDeviceStatus.REMOVED,"},{"line_number":140,"context_line":"                                             fields.PciDeviceStatus.DELETED)]"},{"line_number":141,"context_line":"        children \u003d collections.defaultdict(list)"},{"line_number":142,"context_line":"        parents \u003d {dev.address: dev for dev in active_devs"},{"line_number":143,"context_line":"                   if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF}"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_355fe776","line":141,"range":{"start_line":141,"start_character":8,"end_line":141,"end_character":16},"updated":"2016-04-08 20:06:18.000000000","message":"Why don\u0027t we make the children a PciDeviceList? Maybe that\u0027s too heavy weight.","commit_id":"d7331305261b0e5f3a34a5080efa494116ca2676"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.stats \u003d stats.PciDeviceStats(dev_filter\u003dself.dev_filter)"},{"line_number":60,"context_line":"        self._context \u003d context"},{"line_number":61,"context_line":"        if node_id:"},{"line_number":62,"context_line":"            self.pci_devs \u003d objects.PciDeviceList.get_by_compute_node("},{"line_number":63,"context_line":"                    context, node_id)"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            self.pci_devs \u003d objects.PciDeviceList(objects\u003d[])"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_ff152a9b","line":62,"range":{"start_line":62,"start_character":29,"end_line":62,"end_character":69},"updated":"2016-04-13 09:09:44.000000000","message":"This runs as part of the compute service so really only cares about devices of a single host.","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3ea3a582d67b7be724d41e8de541168f9a1f4537","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self._set_hvdevs(devices)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @staticmethod"},{"line_number":122,"context_line":"    def _build_device_tree(all_devs):"},{"line_number":123,"context_line":"        \"\"\"Build a tree of devices that represents parent-child relationships."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        We need to have the relationships set up so that we can easily make"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_d3f690d6","line":122,"updated":"2016-04-12 16:05:03.000000000","message":"So the number of devices here can be really huge and your are parsing this big list 4 times. Also now we have a variable who growing in space by O(n) with n number of PCI devices (We can probably consider the number of hosts growing instead-of decreasing in a cluster).\n\nI really don\u0027t like that code :/\n\nWhat is the problem with the current implementation using database ?","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self._set_hvdevs(devices)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @staticmethod"},{"line_number":122,"context_line":"    def _build_device_tree(all_devs):"},{"line_number":123,"context_line":"        \"\"\"Build a tree of devices that represents parent-child relationships."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        We need to have the relationships set up so that we can easily make"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_bfee12b2","line":122,"in_reply_to":"5a18252c_d3f690d6","updated":"2016-04-13 09:09:44.000000000","message":"So this is only devices on a single host - the reason we can\u0027t use the DB is the same reason we need this patch. All of the current code makes changes to in-memory objects in self.pci_devs (not that these are only devices of a single host), and then periodically written out to the db. \n\nBecause of that we can\u0027t grab objects from the DB for the purposes of updating them - we have to use the in memory copy or we risk losing changes when the next flush happens even if we save() the instance we grabbed.\n\nAs for passing the list 4 times - I don\u0027t think it\u0027s a big deal, but I can cut it down to 2 times easily.","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ec98bd368e42e4556d66c4a4180b55ca7bf0599","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        in `pci_devs` to `child_devices` and `parent_device` fields of each"},{"line_number":131,"context_line":"        one."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        Currently relationships are considered or SR-IOV PFs/VFs only."},{"line_number":134,"context_line":"        \"\"\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        # NOTE(ndipanov): Removed devs are pruned from self.pci_devs on save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_1c593d5b","line":133,"range":{"start_line":133,"start_character":47,"end_line":133,"end_character":49},"updated":"2016-04-12 13:41:30.000000000","message":"for","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        in `pci_devs` to `child_devices` and `parent_device` fields of each"},{"line_number":131,"context_line":"        one."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        Currently relationships are considered or SR-IOV PFs/VFs only."},{"line_number":134,"context_line":"        \"\"\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        # NOTE(ndipanov): Removed devs are pruned from self.pci_devs on save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_a2abc088","line":133,"range":{"start_line":133,"start_character":47,"end_line":133,"end_character":49},"in_reply_to":"5a18252c_1c593d5b","updated":"2016-04-13 09:09:44.000000000","message":"Done","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ec98bd368e42e4556d66c4a4180b55ca7bf0599","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        for dev in active_devs:"},{"line_number":147,"context_line":"            if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF:"},{"line_number":148,"context_line":"                children[dev.parent_addr].append(dev)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        for dev in active_devs:"},{"line_number":151,"context_line":"            if dev.address in parents:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_dc0ce544","line":148,"range":{"start_line":148,"start_character":29,"end_line":148,"end_character":40},"updated":"2016-04-12 13:41:30.000000000","message":"Are we sure this field will be set here?","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        for dev in active_devs:"},{"line_number":147,"context_line":"            if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF:"},{"line_number":148,"context_line":"                children[dev.parent_addr].append(dev)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        for dev in active_devs:"},{"line_number":151,"context_line":"            if dev.address in parents:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_0201d4ae","line":148,"range":{"start_line":148,"start_character":29,"end_line":148,"end_character":40},"in_reply_to":"5a18252c_dc0ce544","updated":"2016-04-13 09:09:44.000000000","message":"Yeah it really should be set at all times for VFs","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ec98bd368e42e4556d66c4a4180b55ca7bf0599","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF:"},{"line_number":148,"context_line":"                children[dev.parent_addr].append(dev)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        for dev in active_devs:"},{"line_number":151,"context_line":"            if dev.address in parents:"},{"line_number":152,"context_line":"                dev.child_devices \u003d children.get(dev.address, [])"},{"line_number":153,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_5f828753","line":150,"updated":"2016-04-12 13:41:30.000000000","message":"Can any of this be recursive or are these all single-order relationships, no nesting?","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF:"},{"line_number":148,"context_line":"                children[dev.parent_addr].append(dev)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        for dev in active_devs:"},{"line_number":151,"context_line":"            if dev.address in parents:"},{"line_number":152,"context_line":"                dev.child_devices \u003d children.get(dev.address, [])"},{"line_number":153,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_e2ce5882","line":150,"in_reply_to":"5a18252c_5f828753","updated":"2016-04-13 09:09:44.000000000","message":"PCI functions cannot have functions of their own so one level of nesting is fine.","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"d8de57cc6c0672a4994974ac2919c10efa338c99","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    context, node_id)"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            self.pci_devs \u003d objects.PciDeviceList(objects\u003d[])"},{"line_number":66,"context_line":"        self._build_device_tree(self.pci_devs)"},{"line_number":67,"context_line":"        self._initial_instance_usage()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _initial_instance_usage(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_6e09a02c","line":66,"updated":"2016-04-15 17:10:43.000000000","message":"Should this be executed every time the PciDevTracker object is created (every time the nova compute process is launched) ?\n\nWould it make sense to do this logic in _set_hvdevs() only when a new device is added ?","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"fcdf2defd2251d151ae97e677de4aeac7739cd30","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    context, node_id)"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            self.pci_devs \u003d objects.PciDeviceList(objects\u003d[])"},{"line_number":66,"context_line":"        self._build_device_tree(self.pci_devs)"},{"line_number":67,"context_line":"        self._initial_instance_usage()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _initial_instance_usage(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_d1c17530","line":66,"in_reply_to":"1a122d0e_6e09a02c","updated":"2016-04-15 17:56:13.000000000","message":"I take this back, just realized that child_devices and parent_devices are not persisted in the db and only parent_addr is.\n\nBut would it make sense to store the child_addresses in the PciDevice object ?\n\nYou could then have a db object method to get the child devices (I guess getting the parent is straightforward) ?","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"44a9174a0cdcb6f163c5a6d65e7e972037f37d5e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    context, node_id)"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            self.pci_devs \u003d objects.PciDeviceList(objects\u003d[])"},{"line_number":66,"context_line":"        self._build_device_tree(self.pci_devs)"},{"line_number":67,"context_line":"        self._initial_instance_usage()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _initial_instance_usage(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_8648418c","line":66,"in_reply_to":"1a122d0e_d1c17530","updated":"2016-05-03 13:32:28.000000000","message":"Even with that the database does not reflect what it actually happen locally, so we should to keep reference of children then use the global save from resource_tracker to update the database.\n\nAn optimization would be to update PciDevicesList to use a map instead of a list so we can access to the reference easily without to pass through all the devices.","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f7bcefbbc489c97f95af6d31ab0d6a099320b5ac","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        children \u003d collections.defaultdict(list)"},{"line_number":143,"context_line":"        parents \u003d {}"},{"line_number":144,"context_line":"        for dev in active_devs:"},{"line_number":145,"context_line":"            if dev.status not in (fields.PciDeviceStatus.REMOVED,"},{"line_number":146,"context_line":"                                  fields.PciDeviceStatus.DELETED):"},{"line_number":147,"context_line":"                if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF:"},{"line_number":148,"context_line":"                    children[dev.parent_addr].append(dev)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_afe4390d","line":145,"updated":"2016-05-18 13:39:06.000000000","message":"active dev is already filtered","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f7bcefbbc489c97f95af6d31ab0d6a099320b5ac","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        for dev in active_devs:"},{"line_number":145,"context_line":"            if dev.status not in (fields.PciDeviceStatus.REMOVED,"},{"line_number":146,"context_line":"                                  fields.PciDeviceStatus.DELETED):"},{"line_number":147,"context_line":"                if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF:"},{"line_number":148,"context_line":"                    children[dev.parent_addr].append(dev)"},{"line_number":149,"context_line":"                elif dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF:"},{"line_number":150,"context_line":"                    parents[dev.address] \u003d dev"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_4fbaede2","line":147,"updated":"2016-05-18 13:39:06.000000000","message":"Make more sens to start by PF","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f7bcefbbc489c97f95af6d31ab0d6a099320b5ac","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                elif dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF:"},{"line_number":150,"context_line":"                    parents[dev.address] \u003d dev"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        for dev in active_devs:"},{"line_number":153,"context_line":"            if dev.address in parents:"},{"line_number":154,"context_line":"                dev.child_devices \u003d children.get(dev.address, [])"},{"line_number":155,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_cfcedd82","line":152,"updated":"2016-05-18 13:39:06.000000000","message":"We can only go through parents","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"386215f1c7723bb7cddd3062dc8d212f71542736","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                elif dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF:"},{"line_number":150,"context_line":"                    parents[dev.address] \u003d dev"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        for dev in active_devs:"},{"line_number":153,"context_line":"            if dev.address in parents:"},{"line_number":154,"context_line":"                dev.child_devices \u003d children.get(dev.address, [])"},{"line_number":155,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_750e9e35","line":152,"updated":"2016-05-18 13:53:10.000000000","message":"Actually no need of loop we can build this tree in one-loop","commit_id":"4648d2414bd14225d2cabf25618fae39312ee3a8"}],"nova/tests/unit/pci/test_manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2f368227b5a32a523d392284daa4df4ae362a1","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        patcher \u003d pci_fakes.fake_pci_whitelist()"},{"line_number":148,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":149,"context_line":"        self._create_fake_instance()"},{"line_number":150,"context_line":"        self._create_tracker()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_pcidev_tracker_create(self):"},{"line_number":153,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 3)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_3f318ba3","line":150,"updated":"2016-04-12 13:55:32.000000000","message":"Just pass fake_db_devs[:] to _create_tracker so it sets self.fake_devs?","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        patcher \u003d pci_fakes.fake_pci_whitelist()"},{"line_number":148,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":149,"context_line":"        self._create_fake_instance()"},{"line_number":150,"context_line":"        self._create_tracker()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_pcidev_tracker_create(self):"},{"line_number":153,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 3)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_62ffe801","line":150,"in_reply_to":"5a18252c_3f318ba3","updated":"2016-04-13 09:09:44.000000000","message":"Done","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2f368227b5a32a523d392284daa4df4ae362a1","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                              dev in self.tracker.pci_devs]),"},{"line_number":241,"context_line":"                         set([\u0027v\u0027, \u0027v1\u0027, \u0027v2\u0027]))"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_set_hvdev_new_dev_tree_maintained(self):"},{"line_number":244,"context_line":"        self._create_tracker(fake_devs\u003dfake_db_devs_tree)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        fake_new_device \u003d dict(fake_pci_5, id\u003d12, address\u003d\u00270000:00:02.3\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_9ffedf69","line":243,"updated":"2016-04-12 13:55:32.000000000","message":"nit: It\u0027d be helpful to have a comment in this test case as for the scenario it\u0027s testing.","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                              dev in self.tracker.pci_devs]),"},{"line_number":241,"context_line":"                         set([\u0027v\u0027, \u0027v1\u0027, \u0027v2\u0027]))"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_set_hvdev_new_dev_tree_maintained(self):"},{"line_number":244,"context_line":"        self._create_tracker(fake_devs\u003dfake_db_devs_tree)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        fake_new_device \u003d dict(fake_pci_5, id\u003d12, address\u003d\u00270000:00:02.3\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_021b9473","line":243,"in_reply_to":"5a18252c_9ffedf69","updated":"2016-04-13 09:09:44.000000000","message":"Done","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2f368227b5a32a523d392284daa4df4ae362a1","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        fake_pci_devs \u003d [copy.deepcopy(fake_pci_3), copy.deepcopy(fake_pci_4)]"},{"line_number":283,"context_line":"        self.tracker._set_hvdevs(fake_pci_devs)"},{"line_number":284,"context_line":"        self.assertEqual"},{"line_number":285,"context_line":"        self.assertEqual(2, len([dev for dev in self.tracker.pci_devs"},{"line_number":286,"context_line":"                                 if dev.status !\u003d \u0027removed\u0027]))"},{"line_number":287,"context_line":"        pf \u003d [dev for dev in self.tracker.pci_devs"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_9f837fcc","line":284,"updated":"2016-04-12 13:55:32.000000000","message":"?","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2776181b10a69745c3771d9c539aa024342fd34a","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        fake_pci_devs \u003d [copy.deepcopy(fake_pci_3), copy.deepcopy(fake_pci_4)]"},{"line_number":283,"context_line":"        self.tracker._set_hvdevs(fake_pci_devs)"},{"line_number":284,"context_line":"        self.assertEqual"},{"line_number":285,"context_line":"        self.assertEqual(2, len([dev for dev in self.tracker.pci_devs"},{"line_number":286,"context_line":"                                 if dev.status !\u003d \u0027removed\u0027]))"},{"line_number":287,"context_line":"        pf \u003d [dev for dev in self.tracker.pci_devs"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_a220e09c","line":284,"in_reply_to":"5a18252c_9f837fcc","updated":"2016-04-13 09:09:44.000000000","message":"I\u0027m as surprised as you are...","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2f368227b5a32a523d392284daa4df4ae362a1","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        self.tracker._set_hvdevs(fake_pci_devs)"},{"line_number":284,"context_line":"        self.assertEqual"},{"line_number":285,"context_line":"        self.assertEqual(2, len([dev for dev in self.tracker.pci_devs"},{"line_number":286,"context_line":"                                 if dev.status !\u003d \u0027removed\u0027]))"},{"line_number":287,"context_line":"        pf \u003d [dev for dev in self.tracker.pci_devs"},{"line_number":288,"context_line":"              if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF].pop()"},{"line_number":289,"context_line":"        vfs \u003d [dev for dev in self.tracker.pci_devs"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_df54d755","line":286,"range":{"start_line":286,"start_character":36,"end_line":286,"end_character":59},"updated":"2016-04-12 13:55:32.000000000","message":"Where do we have any fake devs with \u0027removed\u0027 or \u0027deleted\u0027 status being used in the tests?\n\n--\n\nOh nevermind I see that _set_hvdevs calls remove() on the device which changes the status before we build the tree.","commit_id":"bdf0a972a070f601638f3907dbd5fbd6239f642f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f7bcefbbc489c97f95af6d31ab0d6a099320b5ac","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self.assertEqual(3, len(vfs))"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        # Assert we build the device tree correctly"},{"line_number":260,"context_line":"        self.assertEqual(vfs, pf.child_devices)"},{"line_number":261,"context_line":"        for vf in vfs:"},{"line_number":262,"context_line":"            self.assertEqual(vf.parent_device, pf)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_4fb66ddd","line":260,"updated":"2016-05-18 13:39:06.000000000","message":"The test looks weird, we should normally have only 2VFs since the PF referenced by \u0027pf\u0027 only have two children, the new one added is not a child of \u0027pf\u0027","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f7bcefbbc489c97f95af6d31ab0d6a099320b5ac","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                   dev.status !\u003d \u0027removed\u0027)]"},{"line_number":294,"context_line":"        self.assertEqual(1, len(vfs))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        self.assertEqual(vfs, pf.child_devices)"},{"line_number":297,"context_line":"        self.assertEqual(vfs[0].parent_device, pf)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    @mock.patch(\u0027nova.objects.InstancePCIRequests.get_by_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_af6a7918","line":296,"updated":"2016-05-18 13:39:06.000000000","message":"something is not clear here, so child_devices should have 2 VFs referenced, one status active and the other with removed","commit_id":"032b3c297d44702f8e5327345427cdd2ec4af528"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f88613a0cb9d0154ec717ea78efc20fb82dfea52","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        fake_pci_devs \u003d [copy.deepcopy(fake_pci_3), copy.deepcopy(fake_pci_4)]"},{"line_number":295,"context_line":"        self.tracker._set_hvdevs(fake_pci_devs)"},{"line_number":296,"context_line":"        self.assertEqual(2, len([dev for dev in self.tracker.pci_devs"},{"line_number":297,"context_line":"                                 if dev.status !\u003d \u0027removed\u0027]))"},{"line_number":298,"context_line":"        pf \u003d [dev for dev in self.tracker.pci_devs"},{"line_number":299,"context_line":"              if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF].pop()"},{"line_number":300,"context_line":"        vfs \u003d [dev for dev in self.tracker.pci_devs"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_a710d54f","line":297,"updated":"2016-05-18 15:52:05.000000000","message":"Please use the constants defined in nova.objects.fields.PciDeviceStatus instead of hard-coded strings.","commit_id":"89b3b216746887d9e3315605dd824524f5f9b8fe"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f88613a0cb9d0154ec717ea78efc20fb82dfea52","unresolved":false,"context_lines":[{"line_number":299,"context_line":"              if dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_PF].pop()"},{"line_number":300,"context_line":"        vfs \u003d [dev for dev in self.tracker.pci_devs"},{"line_number":301,"context_line":"               if (dev.dev_type \u003d\u003d fields.PciDeviceType.SRIOV_VF and"},{"line_number":302,"context_line":"                   dev.status !\u003d \u0027removed\u0027)]"},{"line_number":303,"context_line":"        self.assertEqual(1, len(vfs))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        self.assertEqual(\u0027available\u0027, pf.child_devices[0].status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_071e0163","line":302,"updated":"2016-05-18 15:52:05.000000000","message":"Ditto","commit_id":"89b3b216746887d9e3315605dd824524f5f9b8fe"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f88613a0cb9d0154ec717ea78efc20fb82dfea52","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        self.assertEqual(1, len(vfs))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        self.assertEqual(\u0027available\u0027, pf.child_devices[0].status)"},{"line_number":306,"context_line":"        self.assertEqual(\u0027removed\u0027, pf.child_devices[1].status)"},{"line_number":307,"context_line":"        self.assertEqual(vfs[0].parent_device, pf)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @mock.patch(\u0027nova.objects.InstancePCIRequests.get_by_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_e71add6d","line":306,"updated":"2016-05-18 15:52:05.000000000","message":"Ditto","commit_id":"89b3b216746887d9e3315605dd824524f5f9b8fe"}]}
