)]}'
{"nova/pci/manager.py":[{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"2d3bfd67053ced3378d53bd9ff19120854790a4d","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            # pci device. Once found one free it."},{"line_number":266,"context_line":"            if dev \u003d\u003d pci_dev and dev.instance_uuid \u003d\u003d instance[\u0027uuid\u0027]:"},{"line_number":267,"context_line":"                self.allocations.pop(instance[\u0027uuid\u0027], None)"},{"line_number":268,"context_line":"                self.claims.pop(instance[\u0027uuid\u0027], None)"},{"line_number":269,"context_line":"                self._free_device(pci_dev)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _free_device(self, dev, instance\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_097f7ae0","line":268,"updated":"2016-09-13 12:12:46.000000000","message":"This is going to be called multiple times if the instance has multiple pci devices.  But not an issue, pretty harmless.","commit_id":"5bf7352279fb96abc80c8ce253abf8d55ed9726a"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"9e9a19d96a693e978adc01f0ace0aa48eaefa58b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                self._free_device(pci_dev)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _remove_device_from_pci_mapping("},{"line_number":274,"context_line":"        self, instance_uuid, pci_device, pci_mapping):"},{"line_number":275,"context_line":"        pci_devices \u003d pci_mapping.get(instance_uuid, [])"},{"line_number":276,"context_line":"        if pci_device in pci_devices:"},{"line_number":277,"context_line":"            pci_devices.remove(pci_device)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_8571efe2","line":274,"updated":"2016-09-15 15:29:13.000000000","message":"Nit: Fix indentation here so that it is not aligned with block of code.","commit_id":"b46905f7c9e120baff3d36d4ed5c0a9517dcebb1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d36b1c0269b3388666a5793b443f21517cd695fd","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                self._free_device(pci_dev)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _remove_device_from_pci_mapping("},{"line_number":274,"context_line":"        self, instance_uuid, pci_device, pci_mapping):"},{"line_number":275,"context_line":"        pci_devices \u003d pci_mapping.get(instance_uuid, [])"},{"line_number":276,"context_line":"        if pci_device in pci_devices:"},{"line_number":277,"context_line":"            pci_devices.remove(pci_device)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_8f6fecfa","line":274,"in_reply_to":"7a8ec9b2_8571efe2","updated":"2016-09-18 06:27:01.000000000","message":"Done","commit_id":"b46905f7c9e120baff3d36d4ed5c0a9517dcebb1"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"9e9a19d96a693e978adc01f0ace0aa48eaefa58b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        if pci_device in pci_devices:"},{"line_number":277,"context_line":"            pci_devices.remove(pci_device)"},{"line_number":278,"context_line":"            if len(pci_devices) \u003d\u003d 0:"},{"line_number":279,"context_line":"                pci_mapping.pop(instance_uuid, None)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _free_device(self, dev, instance\u003dNone):"},{"line_number":282,"context_line":"        freed_devs \u003d dev.free(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_de4ae8c4","line":279,"updated":"2016-09-15 15:29:13.000000000","message":"This is getting confusing.\n\nSo from drop_move_claim(), we iterate on the all the PCI devices from the migration context.  Then all the loops here.\n\nBut I can\u0027t think of a better alternative for the moment.","commit_id":"b46905f7c9e120baff3d36d4ed5c0a9517dcebb1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d36b1c0269b3388666a5793b443f21517cd695fd","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        if pci_device in pci_devices:"},{"line_number":277,"context_line":"            pci_devices.remove(pci_device)"},{"line_number":278,"context_line":"            if len(pci_devices) \u003d\u003d 0:"},{"line_number":279,"context_line":"                pci_mapping.pop(instance_uuid, None)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _free_device(self, dev, instance\u003dNone):"},{"line_number":282,"context_line":"        freed_devs \u003d dev.free(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_6f6c6008","line":279,"in_reply_to":"7a8ec9b2_de4ae8c4","updated":"2016-09-18 06:27:01.000000000","message":"agree, pci is not easy code :)","commit_id":"b46905f7c9e120baff3d36d4ed5c0a9517dcebb1"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"d793a0b49ae99100c0028997cabda8de9e3fbd18","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        for pci_dev in self.pci_devs:"},{"line_number":264,"context_line":"            # find the matching pci device in the pci resource tracker"},{"line_number":265,"context_line":"            # pci device. Once found one free it."},{"line_number":266,"context_line":"            if dev \u003d\u003d pci_dev and dev.instance_uuid \u003d\u003d instance[\u0027uuid\u0027]:"},{"line_number":267,"context_line":"                self._remove_device_from_pci_mapping("},{"line_number":268,"context_line":"                    instance[\u0027uuid\u0027], pci_dev, self.allocations)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_7098bc78","line":265,"updated":"2016-09-18 14:03:50.000000000","message":"s/Once found one free it/ Once found, free it/","commit_id":"0189c43c78d48e85b805078474d63ac53fbe59b8"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"d793a0b49ae99100c0028997cabda8de9e3fbd18","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                self._free_device(pci_dev)"},{"line_number":272,"context_line":"                break"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _remove_device_from_pci_mapping("},{"line_number":275,"context_line":"            self, instance_uuid, pci_device, pci_mapping):"},{"line_number":276,"context_line":"        pci_devices \u003d pci_mapping.get(instance_uuid, [])"},{"line_number":277,"context_line":"        if pci_device in pci_devices:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_5084a009","line":274,"updated":"2016-09-18 14:03:50.000000000","message":"Can you please add a comment to this method on what it does.\n\nMaybe something like: \"Remove a PCI device from allocations or claims.  If there are no more PCI devices, pop the uuid.\"","commit_id":"0189c43c78d48e85b805078474d63ac53fbe59b8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4aff06eab95794b86ea88870d436b506b168328d","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        for pci_dev in self.pci_devs:"},{"line_number":264,"context_line":"            # find the matching pci device in the pci resource tracker"},{"line_number":265,"context_line":"            # pci device. Once found, free it."},{"line_number":266,"context_line":"            if dev.id \u003d\u003d pci_dev.id and dev.instance_uuid \u003d\u003d instance[\u0027uuid\u0027]:"},{"line_number":267,"context_line":"                self._remove_device_from_pci_mapping("},{"line_number":268,"context_line":"                    instance[\u0027uuid\u0027], pci_dev, self.allocations)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_70537817","line":265,"updated":"2016-11-02 18:53:47.000000000","message":"If you\u0027re correcting the above code comment, you might as well remove the \"pci device.\" part at the beginning of the line, since it doesn\u0027t make any sense.","commit_id":"7a68ddd8b96fe756c0ada2617845004746a205a3"},{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"b654c244e7d104ca47e4e4f7bbb099c2a4bb642b","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        pci_devices \u003d pci_mapping.get(instance_uuid, [])"},{"line_number":281,"context_line":"        if pci_device in pci_devices:"},{"line_number":282,"context_line":"            pci_devices.remove(pci_device)"},{"line_number":283,"context_line":"            if len(pci_devices) \u003d\u003d 0:"},{"line_number":284,"context_line":"                pci_mapping.pop(instance_uuid, None)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _free_device(self, dev, instance\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_01dda9df","line":283,"updated":"2016-11-02 12:01:20.000000000","message":"I think that `if not pci_devices` is a bit more pythonic IMHO","commit_id":"7a68ddd8b96fe756c0ada2617845004746a205a3"}],"nova/tests/unit/pci/test_manager.py":[{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"d793a0b49ae99100c0028997cabda8de9e3fbd18","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        free_devs \u003d self.tracker.pci_stats.get_free_devs()"},{"line_number":473,"context_line":"        self.assertEqual(len(free_devs), 3)"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    def test_free_device(self):"},{"line_number":476,"context_line":"        pci_requests_obj \u003d self._create_pci_requests_object("},{"line_number":477,"context_line":"            [{\u0027count\u0027: 1, \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v\u0027}]}])"},{"line_number":478,"context_line":"        self.tracker.claim_instance(mock.sentinel.context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_b0ac048d","line":475,"updated":"2016-09-18 14:03:50.000000000","message":"Good ut here.","commit_id":"0189c43c78d48e85b805078474d63ac53fbe59b8"}]}
