)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ed12592d9fac88dea99f75e05abb13693a034597","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The free_device pci_device Free single device"},{"line_number":10,"context_line":"from pci resource tracker, This patch lookup the corresponding"},{"line_number":11,"context_line":"pci_device by comparing pci device id and not the whole object."},{"line_number":12,"context_line":"This will allow to free pci device even if some of its attributes"},{"line_number":13,"context_line":"are not matched to the corresponding device in the pci resource tracker."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ac06dbe_0392339e","line":11,"updated":"2016-08-22 16:43:26.000000000","message":"This first sentence isn\u0027t a sentence. Not quite sure what it is, but it doesn\u0027t make sense :)","commit_id":"43cc1ada771ad679f9b56656ec53724116b67b0f"}],"nova/tests/unit/pci/test_manager.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9120a2c313d3cd99ae33abb1cb0888d1d778abf7","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        self.tracker.free_instance(None, self.inst)"},{"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("}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_c97211ad","line":473,"range":{"start_line":473,"start_character":8,"end_line":473,"end_character":43},"updated":"2016-08-22 11:45:36.000000000","message":"I will fix this in separate patch","commit_id":"ed08433f0f7ee27a825e6f1dd6f1a5d7733e0f80"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"c489eadaf5421961babfa9b302c184d9235d0242","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        self.tracker.update_pci_for_instance(None, self.inst, sign\u003d1)"},{"line_number":481,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":482,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":483,"context_line":"        self.assertEqual(len(free_pci_device_ids), 2)"},{"line_number":484,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":485,"context_line":"        pci_device \u003d allocated_devs[0]"},{"line_number":486,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_9227a6b5","line":483,"updated":"2016-08-22 10:26:56.000000000","message":"nit:  expected value should be first\n\n self.assertEqual(2, len(free_pci_device_ids))","commit_id":"ed08433f0f7ee27a825e6f1dd6f1a5d7733e0f80"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9120a2c313d3cd99ae33abb1cb0888d1d778abf7","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        self.tracker.update_pci_for_instance(None, self.inst, sign\u003d1)"},{"line_number":481,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":482,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":483,"context_line":"        self.assertEqual(len(free_pci_device_ids), 2)"},{"line_number":484,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":485,"context_line":"        pci_device \u003d allocated_devs[0]"},{"line_number":486,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_293c85c7","line":483,"in_reply_to":"1ac06dbe_9227a6b5","updated":"2016-08-22 11:45:36.000000000","message":"copy paste mistake from line 473 :)","commit_id":"ed08433f0f7ee27a825e6f1dd6f1a5d7733e0f80"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"c489eadaf5421961babfa9b302c184d9235d0242","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":488,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":489,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":490,"context_line":"        self.assertEqual(len(free_pci_device_ids), 3)"},{"line_number":491,"context_line":"        self.assertIn(pci_device.id, free_pci_device_ids)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_5236cee6","line":490,"updated":"2016-08-22 10:26:56.000000000","message":"ditto","commit_id":"ed08433f0f7ee27a825e6f1dd6f1a5d7733e0f80"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9120a2c313d3cd99ae33abb1cb0888d1d778abf7","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":488,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":489,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":490,"context_line":"        self.assertEqual(len(free_pci_device_ids), 3)"},{"line_number":491,"context_line":"        self.assertIn(pci_device.id, free_pci_device_ids)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_093709e4","line":490,"in_reply_to":"1ac06dbe_5236cee6","updated":"2016-08-22 11:45:36.000000000","message":"Done","commit_id":"ed08433f0f7ee27a825e6f1dd6f1a5d7733e0f80"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0babd101fac85f60327c569025e9ebd44b6bf1f4","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":"fa6399be_92f8bbc6","line":475,"updated":"2016-10-18 01:01:11.000000000","message":"Even after reverting the code part, this test can pass.\nSo this test doesn\u0027t seem to fit to the corresponding change..","commit_id":"8825b833749e6db7d9af96cb532bf0ccf703fa2c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0114a061b812684a47625d144121eaff9c429d77","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":"fa6399be_f0b53a7e","line":475,"in_reply_to":"fa6399be_92f8bbc6","updated":"2016-10-19 06:55:52.000000000","message":"yes are right, this just test the pci_manager.free_device method which was missing a unit test. I added another test to cover the corresponding change","commit_id":"8825b833749e6db7d9af96cb532bf0ccf703fa2c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0babd101fac85f60327c569025e9ebd44b6bf1f4","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":483,"context_line":"        self.assertEqual(2, len(free_pci_device_ids))"},{"line_number":484,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":485,"context_line":"        pci_device \u003d allocated_devs[0]"},{"line_number":486,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"},{"line_number":487,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":488,"context_line":"        free_pci_device_ids \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_72b407d1","line":485,"range":{"start_line":485,"start_character":8,"end_line":485,"end_character":38},"updated":"2016-10-18 01:01:11.000000000","message":"Maybe this pci_device points the same instance and the original code can work on this test.","commit_id":"8825b833749e6db7d9af96cb532bf0ccf703fa2c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"10140d85ccee3e0990dbe74feaaa9b0140c02956","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,"},{"line_number":479,"context_line":"                                    pci_requests_obj, None)"},{"line_number":480,"context_line":"        self.tracker.update_pci_for_instance(None, self.inst, sign\u003d1)"},{"line_number":481,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":482,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":483,"context_line":"        self.assertEqual(2, len(free_pci_device_ids))"},{"line_number":484,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":485,"context_line":"        pci_device \u003d allocated_devs[0]"},{"line_number":486,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"},{"line_number":487,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":488,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":489,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":490,"context_line":"        self.assertEqual(3, len(free_pci_device_ids))"},{"line_number":491,"context_line":"        self.assertIn(pci_device.id, free_pci_device_ids)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def test_free_device_with_different_status(self):"},{"line_number":494,"context_line":"        pci_requests_obj \u003d self._create_pci_requests_object("},{"line_number":495,"context_line":"            [{\u0027count\u0027: 1, \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v\u0027}]}])"},{"line_number":496,"context_line":"        self.tracker.claim_instance(mock.sentinel.context,"},{"line_number":497,"context_line":"                                    pci_requests_obj, None)"},{"line_number":498,"context_line":"        self.tracker.update_pci_for_instance(None, self.inst, sign\u003d1)"},{"line_number":499,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":500,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":501,"context_line":"        self.assertEqual(2, len(free_pci_device_ids))"},{"line_number":502,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":503,"context_line":"        pci_device \u003d copy.deepcopy(allocated_devs[0])"},{"line_number":504,"context_line":"        pci_device.status \u003d fields.PciDeviceStatus.CLAIMED"},{"line_number":505,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"},{"line_number":506,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":507,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":508,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":509,"context_line":"        self.assertEqual(3, len(free_pci_device_ids))"},{"line_number":510,"context_line":"        self.assertIn(pci_device.id, free_pci_device_ids)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"class PciGetInstanceDevs(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_5095fb3d","line":510,"range":{"start_line":475,"start_character":0,"end_line":510,"end_character":57},"updated":"2016-10-19 11:05:00.000000000","message":"While I we do want verbosity in tests, that is a lot of duplication. Perhaps a single test and for loop could be used?\n\n    pci_device_a \u003d allocated_devs[0]\n    pci_device_b \u003d copy.deepcopy(allocated_devs[0])\n    pci_device_b.status \u003d fields.PciDeviceStatus.CLAIMED\n\n    for pci_device in [pci_device_a, pci_device_b]:\n        # test here","commit_id":"b051abb9089e68abc0cc6261add7279006ec39b4"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"4e0a6a8a62b819929b4610084a379b2dfbd2d799","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,"},{"line_number":479,"context_line":"                                    pci_requests_obj, None)"},{"line_number":480,"context_line":"        self.tracker.update_pci_for_instance(None, self.inst, sign\u003d1)"},{"line_number":481,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":482,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":483,"context_line":"        self.assertEqual(2, len(free_pci_device_ids))"},{"line_number":484,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":485,"context_line":"        pci_device \u003d allocated_devs[0]"},{"line_number":486,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"},{"line_number":487,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":488,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":489,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":490,"context_line":"        self.assertEqual(3, len(free_pci_device_ids))"},{"line_number":491,"context_line":"        self.assertIn(pci_device.id, free_pci_device_ids)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def test_free_device_with_different_status(self):"},{"line_number":494,"context_line":"        pci_requests_obj \u003d self._create_pci_requests_object("},{"line_number":495,"context_line":"            [{\u0027count\u0027: 1, \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v\u0027}]}])"},{"line_number":496,"context_line":"        self.tracker.claim_instance(mock.sentinel.context,"},{"line_number":497,"context_line":"                                    pci_requests_obj, None)"},{"line_number":498,"context_line":"        self.tracker.update_pci_for_instance(None, self.inst, sign\u003d1)"},{"line_number":499,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":500,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":501,"context_line":"        self.assertEqual(2, len(free_pci_device_ids))"},{"line_number":502,"context_line":"        allocated_devs \u003d manager.get_instance_pci_devs(self.inst)"},{"line_number":503,"context_line":"        pci_device \u003d copy.deepcopy(allocated_devs[0])"},{"line_number":504,"context_line":"        pci_device.status \u003d fields.PciDeviceStatus.CLAIMED"},{"line_number":505,"context_line":"        self.assertNotIn(pci_device.id, free_pci_device_ids)"},{"line_number":506,"context_line":"        self.tracker.free_device(pci_device, self.inst)"},{"line_number":507,"context_line":"        free_pci_device_ids \u003d ("},{"line_number":508,"context_line":"            [dev.id for dev in self.tracker.pci_stats.get_free_devs()])"},{"line_number":509,"context_line":"        self.assertEqual(3, len(free_pci_device_ids))"},{"line_number":510,"context_line":"        self.assertIn(pci_device.id, free_pci_device_ids)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"class PciGetInstanceDevs(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_dc7be4f2","line":510,"range":{"start_line":475,"start_character":0,"end_line":510,"end_character":57},"in_reply_to":"fa6399be_5095fb3d","updated":"2016-10-19 12:33:38.000000000","message":"Done","commit_id":"b051abb9089e68abc0cc6261add7279006ec39b4"}]}
