)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16929,"name":"Giridhar Jayavelu","email":"gjayavelu@vmware.com","username":"gjayavelu"},"change_message_id":"4dbde6cf36431f5c0e3e30756748134020ceb257","unresolved":false,"context_lines":[{"line_number":21,"context_line":"functions count and remove it from the pools, when PF is allocated."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Physical function will be removed from the pools when one of it\u0027s"},{"line_number":24,"context_line":"VFs is allocated. It will become available again, when al of it\u0027s"},{"line_number":25,"context_line":"VFs are free."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa69d971_9170bea5","line":24,"updated":"2016-01-06 08:00:31.000000000","message":"typo al.\n\nAlso, for the part \"PF will become available again\". Is that handled in this patch?","commit_id":"30d1461c2fd5d61a69b4243baff6d099d8fdf0d4"}],"nova/pci/request.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"f79a20330df600426c97a92be7aceef68d563ad5","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            spec \u003d jsonutils.loads(jsonspecs)"},{"line_number":113,"context_line":"            jsonschema.validate(spec, _ALIAS_SCHEMA)"},{"line_number":114,"context_line":"            name \u003d spec.pop(\"name\")"},{"line_number":115,"context_line":"            dev_type \u003d spec.pop(\u0027device_type\u0027, None)"},{"line_number":116,"context_line":"            if dev_type:"},{"line_number":117,"context_line":"                spec[\u0027dev_type\u0027] \u003d dev_type"},{"line_number":118,"context_line":"            if name not in aliases:"},{"line_number":119,"context_line":"                aliases[name] \u003d [spec]"},{"line_number":120,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_0760a0cd","line":117,"range":{"start_line":115,"start_character":12,"end_line":117,"end_character":43},"updated":"2016-01-12 18:19:52.000000000","message":"This might be worth a release note to tell people who were using device_type in their aliases (probably no one as it was pretty much useless) that they can\u0027t do it anymore.\n\nIt\u0027s so obscure that it may not be worth the trouble","commit_id":"de7c456afd1cbaaca5a8c78ddf91f000c80e78ab"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5c4860ce739419c0a4c3676924fb9b4e66bd712f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            name \u003d spec.pop(\"name\")"},{"line_number":115,"context_line":"            dev_type \u003d spec.pop(\u0027device_type\u0027, None)"},{"line_number":116,"context_line":"            if dev_type:"},{"line_number":117,"context_line":"                spec[\u0027dev_type\u0027] \u003d dev_type"},{"line_number":118,"context_line":"            if name not in aliases:"},{"line_number":119,"context_line":"                aliases[name] \u003d [spec]"},{"line_number":120,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_738494d3","line":117,"range":{"start_line":117,"start_character":35,"end_line":117,"end_character":43},"updated":"2016-01-13 12:51:11.000000000","message":"So in essence this code is just renaming \u0027device_type\u0027 to \u0027dev_type\u0027.  Why are you doing this - it doesn\u0027t really seem to serve any purpose ?\n\nIn particular note that the permitted values for \u0027device_type\u0027 (the 5 values shown in _ALIAS_DEV_TYPE) are *not* the same as the permitted values for nova.objects.PciDevice.dev_type (the 3 values defined in nova.fields.PciDeviceType).  So if anythig I think this renaming is likely to lead to confusion.","commit_id":"091d04a44c8c5779626f8c5a8d79e9dc9816219d"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"834ad4998a95350184a9d51f36d67df41f33b1e9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            name \u003d spec.pop(\"name\")"},{"line_number":115,"context_line":"            dev_type \u003d spec.pop(\u0027device_type\u0027, None)"},{"line_number":116,"context_line":"            if dev_type:"},{"line_number":117,"context_line":"                spec[\u0027dev_type\u0027] \u003d dev_type"},{"line_number":118,"context_line":"            if name not in aliases:"},{"line_number":119,"context_line":"                aliases[name] \u003d [spec]"},{"line_number":120,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_e04c1b72","line":117,"range":{"start_line":117,"start_character":35,"end_line":117,"end_character":43},"in_reply_to":"da6ed579_738494d3","updated":"2016-01-13 15:50:56.000000000","message":"I\u0027m doing this in order to bring the request.spec attribute names to a common\nground with nova.objects.PciDevice.\nPCI pools are being built according to certain attributes in nova.objects.PciDevice\nand later being matched with a request.spec attribute names, so these has to match.\nPlease see: https://review.openstack.org/gitweb?p\u003dopenstack/nova.git;a\u003dblob;f\u003dnova/pci/stats.py;h\u003dcddb15a27c4514f340d5b78aa89fa05ad0bd2315;hb\u003dHEAD#l179\n\n\nNote that I\u0027m not changing the way users are requesting a device type, this\nremains as a \u0027device_type\u0027, but I\u0027m only changing the key name in spec.\nChanging the dev_type key in the objects.PciDevice would involve major changes.\n\n\nPrior to this change, device_type entry in requests, was nearly useless.\nThe reason why there is a difference between the _ALIAS_DEV_TYPE and nova.fields.PciDeviceType\nis because someone attempted to make this work as a tagging mechanism.\nOne could ask for device_type\u003d\"NIC\" in the request spec and also have a similar\ntag in the pci_passthrough_whitelist, such as: \npci_passthrough_whitelist\u003d[{ \"vendor_id\":\"8086\",\"product_id\":\"1520\", \"device_type\":\"NIC\" }] \n\n\nBecause PCI pools are being constructed with devspec tags (which is coming from a whitelist keys)\nand being overridden with values from the pcidevice object, that might somehow work.\nhttps://review.openstack.org/gitweb?p\u003dopenstack/nova.git;a\u003dblob;f\u003dnova/pci/stats.py;h\u003dcddb15a27c4514f340d5b78aa89fa05ad0bd2315;hb\u003dHEAD#l87\n\n\nIn fact, doubt this functionality is even working, nor useful to anyone.\nAlso, we are not breaking anything the above. IMHO, this patch provides better way to\nmake a request based on a pci device type.\n\n\nI think all of this code deserves a cleanup, and I\u0027ll be happy to do it,\nhowever, I don\u0027t think this should be part of this series.","commit_id":"091d04a44c8c5779626f8c5a8d79e9dc9816219d"}],"nova/pci/stats.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"5e7a078ef0aca714ffb5d54eedc5fd4e65d869e9","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    break"},{"line_number":180,"context_line":"        return alloc_devices"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _handle_device_dependents(self, pci_dev):"},{"line_number":183,"context_line":"        \"\"\"Remove device dependents or a parent from pools."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        In case the device is a PF, all of it\u0027s dependent VFs should"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_8b38c9f0","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":33},"updated":"2015-12-18 14:10:10.000000000","message":"So I think we need to call this in apply_requests as well, but that runs on the schedler so we can\u0027t use the db","commit_id":"a7695779e7c4996d924ec4a3c2120b0ede289db5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"dcb11428ff7fcdd730f502a6663a6a78ec06f031","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    break"},{"line_number":180,"context_line":"        return alloc_devices"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _handle_device_dependents(self, pci_dev):"},{"line_number":183,"context_line":"        \"\"\"Remove device dependents or a parent from pools."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        In case the device is a PF, all of it\u0027s dependent VFs should"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_c30c66ef","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":33},"in_reply_to":"3a7e1126_7c075eca","updated":"2015-12-18 20:00:05.000000000","message":"So apply requests is called in the scheduler:\n\nhttps://github.com/openstack/nova/blob/83189e00be00f908478e5a0d7043027e0163e8b0/nova/scheduler/host_manager.py#L257\n\nSo that requests for several instances update the internal state of the scheduler (also concurrent requests, but this is currently broken due to race conditions see: http://specs.openstack.org/openstack/nova-specs/specs/mitaka/approved/host-state-level-locking.html)\n\nSeeing that this is already kind of broken it may not be necessary to do it properly in this patch but we need to make sure that we at least document the limitations","commit_id":"a7695779e7c4996d924ec4a3c2120b0ede289db5"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"1dc38074d2a978857d8f4c6e651cc46edee9ebe5","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    break"},{"line_number":180,"context_line":"        return alloc_devices"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _handle_device_dependents(self, pci_dev):"},{"line_number":183,"context_line":"        \"\"\"Remove device dependents or a parent from pools."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        In case the device is a PF, all of it\u0027s dependent VFs should"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_7c075eca","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":33},"in_reply_to":"3a7e1126_8b38c9f0","updated":"2015-12-18 15:13:37.000000000","message":"I\u0027m not sure if we really need that in apply.\nI think that it should be sufficient for us to look at the state of the device we are looking to allocate.\nIn the case of VF, if it\u0027s parent has been allocated or claimed, all of it\u0027s vfs will be already either removed or not in available state.\nFor the PF, it would already be in a non available state if one of it\u0027s VF is allocated or claimed.","commit_id":"a7695779e7c4996d924ec4a3c2120b0ede289db5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"dcb11428ff7fcdd730f502a6663a6a78ec06f031","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                pool, [{\u0027numa_node\u0027: cell}])"},{"line_number":224,"context_line":"                                              for cell in numa_cells)]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _filter_non_requested_pfs(self, request, matching_pools):"},{"line_number":227,"context_line":"        # Remove SRIOV_PFs from pools, unless it has been explicitly requested"},{"line_number":228,"context_line":"        # This is especially needed in cases where PFs and VFs has the same"},{"line_number":229,"context_line":"        # product_id."}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_4802d53e","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":33},"updated":"2015-12-18 20:00:05.000000000","message":"Right so this method is fine, and it fixes the issue where unless PFs were explicitly requested - they won\u0027t be considered! Nice.","commit_id":"a7695779e7c4996d924ec4a3c2120b0ede289db5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"b55a22449bd3898385c06ce7c8d29929bbd2bf60","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                if not pool.get(\u0027dev_type\u0027) \u003d\u003d fields.PciDeviceType.SRIOV_PF]"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _apply_request(self, pools, request, numa_cells\u003dNone):"},{"line_number":242,"context_line":"        #NOTE(vladikr): This code maybe open to race conditions."},{"line_number":243,"context_line":"        # The host-state-level-locking spec is aming to address the problem."},{"line_number":244,"context_line":"        count \u003d request.count"},{"line_number":245,"context_line":"        matching_pools \u003d self._filter_pools_for_spec(pools, request.spec)"},{"line_number":246,"context_line":"        if numa_cells:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a7b0d38_09bf33fc","line":243,"range":{"start_line":242,"start_character":23,"end_line":243,"end_character":76},"updated":"2015-12-24 12:55:13.000000000","message":"This is not correct - host state level locking will not do anything to help with the problem this particular patch introduces which is best described by an example: \n\nSince this code is called from the scheduler, two concurrent requests that scheduler decides to place on the same host, one for a VF and one for a PF will succeed, even with proper locking in the scheduler, because this method does not remove related devices from the pools.","commit_id":"3d5d8035b097e7788e99e0bd1e44f03a095aaa18"},{"author":{"_account_id":16929,"name":"Giridhar Jayavelu","email":"gjayavelu@vmware.com","username":"gjayavelu"},"change_message_id":"4dbde6cf36431f5c0e3e30756748134020ceb257","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                self.pools.sort(key\u003dlambda item: len(item))"},{"line_number":108,"context_line":"                pool \u003d dev_pool"},{"line_number":109,"context_line":"            pool[\u0027count\u0027] +\u003d 1"},{"line_number":110,"context_line":"            pool[\u0027devices\u0027].append(dev)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @staticmethod"},{"line_number":113,"context_line":"    def _decrease_pool_count(pool_list, pool, count\u003d1):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_f14d7ac4","line":110,"updated":"2016-01-06 08:00:31.000000000","message":"when this method is called as part of _free_device() from manager, don\u0027t we need to add the VFs back to the pool if dev.dev_type \u003d\u003d \u0027type-PF\u0027?","commit_id":"30d1461c2fd5d61a69b4243baff6d099d8fdf0d4"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"c77cd4a8c64d6b434cc89e686f905ce231c547a0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                self.pools.sort(key\u003dlambda item: len(item))"},{"line_number":108,"context_line":"                pool \u003d dev_pool"},{"line_number":109,"context_line":"            pool[\u0027count\u0027] +\u003d 1"},{"line_number":110,"context_line":"            pool[\u0027devices\u0027].append(dev)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @staticmethod"},{"line_number":113,"context_line":"    def _decrease_pool_count(pool_list, pool, count\u003d1):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_bf8a5d62","line":110,"in_reply_to":"fa69d971_f14d7ac4","updated":"2016-01-07 05:51:52.000000000","message":"Good point indeed. As a side note, all VFs, that belong to an allocated PF, are being removed and disconnected from the driver. Once the PF is free, VFs will reappear and will be reported as new devices by the hypervisor driver.\nThe more important issue here is that I didn\u0027t return the PF to the pool, when all of it\u0027s VFs are freed.\n\nAdding this to the next patch.","commit_id":"30d1461c2fd5d61a69b4243baff6d099d8fdf0d4"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"08adab3ffcc73736ccec92e0c757454bef867c99","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                self.pools.sort(key\u003dlambda item: len(item))"},{"line_number":108,"context_line":"                pool \u003d dev_pool"},{"line_number":109,"context_line":"            pool[\u0027count\u0027] +\u003d 1"},{"line_number":110,"context_line":"            pool[\u0027devices\u0027].append(dev)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @staticmethod"},{"line_number":113,"context_line":"    def _decrease_pool_count(pool_list, pool, count\u003d1):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_d79e1562","line":110,"in_reply_to":"fa69d971_f14d7ac4","updated":"2016-01-06 15:33:35.000000000","message":"This is a good point! The problem is the clumsy API of the PciDeviceStats class where claiming is done using the request objects, but freeing is done using device objects themselves, so we\u0027d have to re implement the logic for freeing :(","commit_id":"30d1461c2fd5d61a69b4243baff6d099d8fdf0d4"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"f79a20330df600426c97a92be7aceef68d563ad5","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            free_devs.extend(pool[\u0027devices\u0027])"},{"line_number":141,"context_line":"        return free_devs"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def consume_requests(self, pci_requests, numa_cells\u003dNone):"},{"line_number":144,"context_line":"        alloc_devices \u003d []"},{"line_number":145,"context_line":"        for request in pci_requests:"},{"line_number":146,"context_line":"            count \u003d request.count"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_4d2317be","line":143,"range":{"start_line":143,"start_character":9,"end_line":143,"end_character":23},"updated":"2016-01-12 18:19:52.000000000","message":"A note to future reviewers - the flip side of this - i.e. putting back the related devices happens in the next patch as part of the next patch in free_devices in the PciDevTracker class.","commit_id":"de7c456afd1cbaaca5a8c78ddf91f000c80e78ab"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a9992b93ebbb75556337d502c7bd0775eadfb9d4","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            free_devs.extend(pool[\u0027devices\u0027])"},{"line_number":141,"context_line":"        return free_devs"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def consume_requests(self, pci_requests, numa_cells\u003dNone):"},{"line_number":144,"context_line":"        alloc_devices \u003d []"},{"line_number":145,"context_line":"        for request in pci_requests:"},{"line_number":146,"context_line":"            count \u003d request.count"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_0bb0a242","line":143,"updated":"2016-01-12 20:25:11.000000000","message":"Nikola Dipanov\n\nA note to future reviewers - the flip side of this - i.e. putting back the related devices happens in the next patch as part of the next patch in free_devices in the PciDevTracker class.","commit_id":"2c29900d201763c98f1ab01ace3bf596e5e278a7"},{"author":{"_account_id":16929,"name":"Giridhar Jayavelu","email":"gjayavelu@vmware.com","username":"gjayavelu"},"change_message_id":"0f6d972c2bfb531a734e03218f31da36f5a83bee","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            free_devs.extend(pool[\u0027devices\u0027])"},{"line_number":141,"context_line":"        return free_devs"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def consume_requests(self, pci_requests, numa_cells\u003dNone):"},{"line_number":144,"context_line":"        alloc_devices \u003d []"},{"line_number":145,"context_line":"        for request in pci_requests:"},{"line_number":146,"context_line":"            count \u003d request.count"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_8179d3fe","line":143,"in_reply_to":"da6ed579_0bb0a242","updated":"2016-01-12 21:41:33.000000000","message":"nit: would be good to have this on commit message","commit_id":"2c29900d201763c98f1ab01ace3bf596e5e278a7"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"dcb11428ff7fcdd730f502a6663a6a78ec06f031","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                self._fake_migration_get_in_progress_by_host_and_node)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        # Note that this must be called before the call to _init_tracker()"},{"line_number":582,"context_line":"        patcher \u003d pci_fakes.fake_pci_whitelist()"},{"line_number":583,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        self._init_tracker()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_88eafdaa","line":582,"updated":"2015-12-18 20:00:05.000000000","message":"this line ! (see further down)","commit_id":"a7695779e7c4996d924ec4a3c2120b0ede289db5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"dcb11428ff7fcdd730f502a6663a6a78ec06f031","unresolved":false,"context_lines":[{"line_number":817,"context_line":"    def _set_pci_passthrough_whitelist(self):"},{"line_number":818,"context_line":"        self.flags(pci_passthrough_whitelist\u003d["},{"line_number":819,"context_line":"            \u0027{\"vendor_id\": \"8086\", \"product_id\": \"0443\",\u0027"},{"line_number":820,"context_line":"            \u0027 \"device_type\": \"NIC\"}\u0027,"},{"line_number":821,"context_line":"            \u0027{\"vendor_id\": \"8086\", \"product_id\": \"7891\"}\u0027])"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"    def test_init(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_08a92d7b","line":820,"range":{"start_line":820,"start_character":13,"end_line":820,"end_character":36},"updated":"2015-12-18 20:00:05.000000000","message":"So the reason this currently works is (see above). Otherwise it would be added to the pool, so we\u0027d have device_type and dev_type. if someone was specifying device_type: \"NIC\" in the alias - it gets turned into \"dev_spec\" key on the spec and fails to match the pool created from this.\n\nSo this would be in theory backwards incompatible, but this is not the major issue I guess","commit_id":"a7695779e7c4996d924ec4a3c2120b0ede289db5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"f79a20330df600426c97a92be7aceef68d563ad5","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        observed_pools \u003d self.tracker.compute_node.pci_device_pools"},{"line_number":799,"context_line":"        self.assertEqualPciDevicePoolList(expected_pools, observed_pools)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def test_whitelist_device_type_ignored(self):"},{"line_number":802,"context_line":"        self.flags(pci_passthrough_whitelist\u003d["},{"line_number":803,"context_line":"            \u0027{\"vendor_id\": \"8086\", \"product_id\": \"0445\"}\u0027,"},{"line_number":804,"context_line":"            \u0027{\"vendor_id\": \"8086\", \"product_id\": \"7891\"}\u0027])"},{"line_number":805,"context_line":"        driver \u003d self._driver()"},{"line_number":806,"context_line":"        self.assertEqual(0, self.tracker.compute_node.current_workload)"},{"line_number":807,"context_line":"        expected_pools \u003d pci_device_pool.from_pci_stats(driver.pci_stats)"},{"line_number":808,"context_line":"        observed_pools \u003d self.tracker.compute_node.pci_device_pools"},{"line_number":809,"context_line":"        self.assertEqualPciDevicePoolList(expected_pools, observed_pools)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    def _driver(self):"},{"line_number":812,"context_line":"        return FakeVirtDriver(pci_support\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_a8e9611c","line":809,"range":{"start_line":801,"start_character":4,"end_line":809,"end_character":73},"updated":"2016-01-12 18:19:52.000000000","message":"This test doesn\u0027t really test anything anymore right? remove?","commit_id":"de7c456afd1cbaaca5a8c78ddf91f000c80e78ab"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"b11a845833f017f75ad49c029810d4e40d746a91","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        observed_pools \u003d self.tracker.compute_node.pci_device_pools"},{"line_number":799,"context_line":"        self.assertEqualPciDevicePoolList(expected_pools, observed_pools)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def test_whitelist_device_type_ignored(self):"},{"line_number":802,"context_line":"        self.flags(pci_passthrough_whitelist\u003d["},{"line_number":803,"context_line":"            \u0027{\"vendor_id\": \"8086\", \"product_id\": \"0445\"}\u0027,"},{"line_number":804,"context_line":"            \u0027{\"vendor_id\": \"8086\", \"product_id\": \"7891\"}\u0027])"},{"line_number":805,"context_line":"        driver \u003d self._driver()"},{"line_number":806,"context_line":"        self.assertEqual(0, self.tracker.compute_node.current_workload)"},{"line_number":807,"context_line":"        expected_pools \u003d pci_device_pool.from_pci_stats(driver.pci_stats)"},{"line_number":808,"context_line":"        observed_pools \u003d self.tracker.compute_node.pci_device_pools"},{"line_number":809,"context_line":"        self.assertEqualPciDevicePoolList(expected_pools, observed_pools)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    def _driver(self):"},{"line_number":812,"context_line":"        return FakeVirtDriver(pci_support\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_d0c8fb76","line":809,"range":{"start_line":801,"start_character":4,"end_line":809,"end_character":73},"in_reply_to":"da6ed579_a8e9611c","updated":"2016-01-12 20:12:56.000000000","message":"Done","commit_id":"de7c456afd1cbaaca5a8c78ddf91f000c80e78ab"}],"nova/tests/unit/pci/test_stats.py":[{"author":{"_account_id":16929,"name":"Giridhar Jayavelu","email":"gjayavelu@vmware.com","username":"gjayavelu"},"change_message_id":"0f6d972c2bfb531a734e03218f31da36f5a83bee","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                                       \u0027dev_type\u0027: \u0027type-PF\u0027}])]"},{"line_number":444,"context_line":"            self.assertIsNone(self.pci_stats.consume_requests(pci_requests))"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_consume_VF_and_PF_same_prodict_id_failed(self):"},{"line_number":447,"context_line":"        with test.nested("},{"line_number":448,"context_line":"            mock.patch.object(objects.PciDevice, \u0027get_by_dev_addr\u0027,"},{"line_number":449,"context_line":"                               side_effect\u003dself._fake_pci_device_get_by_addr),"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_217587ca","line":446,"updated":"2016-01-12 21:41:33.000000000","message":"typo prodict","commit_id":"2c29900d201763c98f1ab01ace3bf596e5e278a7"}]}
