)]}'
{"nova/pci/manager.py":[{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"360b6035bfd79fa2e31d05cd2d61db7a9e482d09","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":279,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        for uuid in list(self.claims.keys()):"},{"line_number":282,"context_line":"            if uuid not in existed:"},{"line_number":283,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":284,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_6bda4beb","line":281,"range":{"start_line":281,"start_character":36,"end_line":281,"end_character":43},"updated":"2016-06-09 15:37:10.000000000","message":"redundant! self.claims is enough.","commit_id":"beaecc74743c9ceb4a3ae2931bf99248d880a0af"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"82157cfa66ccdf56b6880ed5e0e73ab5f5201661","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":279,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        for uuid in list(self.claims.keys()):"},{"line_number":282,"context_line":"            if uuid not in existed:"},{"line_number":283,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":284,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_a7dc5447","line":281,"range":{"start_line":281,"start_character":36,"end_line":281,"end_character":43},"in_reply_to":"7aa08908_6bda4beb","updated":"2016-06-09 20:36:13.000000000","message":"Done","commit_id":"beaecc74743c9ceb4a3ae2931bf99248d880a0af"},{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"360b6035bfd79fa2e31d05cd2d61db7a9e482d09","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":284,"context_line":"                for dev in devs:"},{"line_number":285,"context_line":"                    self._free_device(dev)"},{"line_number":286,"context_line":"        for uuid in list(self.allocations.keys()):"},{"line_number":287,"context_line":"            if uuid not in existed:"},{"line_number":288,"context_line":"                devs \u003d self.allocations.pop(uuid, [])"},{"line_number":289,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_cbf1bf6c","line":286,"range":{"start_line":286,"start_character":41,"end_line":286,"end_character":48},"updated":"2016-06-09 15:37:10.000000000","message":"ditto","commit_id":"beaecc74743c9ceb4a3ae2931bf99248d880a0af"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"82157cfa66ccdf56b6880ed5e0e73ab5f5201661","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":284,"context_line":"                for dev in devs:"},{"line_number":285,"context_line":"                    self._free_device(dev)"},{"line_number":286,"context_line":"        for uuid in list(self.allocations.keys()):"},{"line_number":287,"context_line":"            if uuid not in existed:"},{"line_number":288,"context_line":"                devs \u003d self.allocations.pop(uuid, [])"},{"line_number":289,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_87e15801","line":286,"range":{"start_line":286,"start_character":41,"end_line":286,"end_character":48},"in_reply_to":"7aa08908_cbf1bf6c","updated":"2016-06-09 20:36:13.000000000","message":"Done","commit_id":"beaecc74743c9ceb4a3ae2931bf99248d880a0af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b8848c98c732e55c424df8d3b0f5900623d2169","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":317,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for uuid in list(self.claims):"},{"line_number":320,"context_line":"            if uuid not in existed:"},{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_48bc3cbb","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":25},"updated":"2016-06-29 15:56:46.000000000","message":"I don\u0027t think you need to convert this to a list here: you can iterate over a generators just fine?","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"48471345954da397d7dccfa91103f4a6c51d9b3c","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":317,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for uuid in list(self.claims):"},{"line_number":320,"context_line":"            if uuid not in existed:"},{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_99dc8ee5","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":25},"in_reply_to":"3aaa91ec_3d18091e","updated":"2016-06-30 10:57:32.000000000","message":"Ah, good point","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65a1c97d0f523d56c95e600a0712febb4bdd5d23","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":317,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for uuid in list(self.claims):"},{"line_number":320,"context_line":"            if uuid not in existed:"},{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_880e248a","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":25},"in_reply_to":"3aaa91ec_48bc3cbb","updated":"2016-06-29 15:57:16.000000000","message":"i.e.\n\n    for uuid in self.claims:","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"4f192e1bce3c5eb139a99a529e5a3c9c15188e6f","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":317,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for uuid in list(self.claims):"},{"line_number":320,"context_line":"            if uuid not in existed:"},{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_3d18091e","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":25},"in_reply_to":"3aaa91ec_880e248a","updated":"2016-06-29 17:44:53.000000000","message":"@Stephen: In theory that would work.\n\nExcept that in this case we might pop from self.claims (or self.allocations).\n\nAnd python3 doesn\u0027t like that an report this error:\nRuntimeError: dictionary changed size during iteration\n\nThe trick is to use \u0027list\u0027 to make a copy of the keys.","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"8e52d2b1eb1c290f1c4958e49f68ee12620d40f1","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":317,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for uuid in list(self.claims):"},{"line_number":320,"context_line":"            if uuid not in existed:"},{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_9e9742eb","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":25},"in_reply_to":"3aaa91ec_99dc8ee5","updated":"2016-06-30 15:27:39.000000000","message":"I suggest to add a comment:\n# need to copy keys, because the dict is modified in the loop body\n\nSee my abandonned change:\nhttps://review.openstack.org/#/c/332791/6/nova/pci/manager.py","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"850a65b87ec15867a182aeb5979106739c049521","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":317,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for uuid in list(self.claims):"},{"line_number":320,"context_line":"            if uuid not in existed:"},{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_3bfa3143","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":25},"in_reply_to":"3aaa91ec_9e9742eb","updated":"2016-07-04 14:22:28.000000000","message":"Done","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b8848c98c732e55c424df8d3b0f5900623d2169","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"},{"line_number":323,"context_line":"                    self._free_device(dev)"},{"line_number":324,"context_line":"        for uuid in list(self.allocations):"},{"line_number":325,"context_line":"            if uuid not in existed:"},{"line_number":326,"context_line":"                devs \u003d self.allocations.pop(uuid, [])"},{"line_number":327,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_28c29034","line":324,"range":{"start_line":324,"start_character":8,"end_line":324,"end_character":43},"updated":"2016-06-29 15:56:46.000000000","message":"ditto","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"8e52d2b1eb1c290f1c4958e49f68ee12620d40f1","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":322,"context_line":"                for dev in devs:"},{"line_number":323,"context_line":"                    self._free_device(dev)"},{"line_number":324,"context_line":"        for uuid in list(self.allocations):"},{"line_number":325,"context_line":"            if uuid not in existed:"},{"line_number":326,"context_line":"                devs \u003d self.allocations.pop(uuid, [])"},{"line_number":327,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_de9d4a0b","line":324,"range":{"start_line":324,"start_character":20,"end_line":324,"end_character":24},"updated":"2016-06-30 15:27:39.000000000","message":"ditto","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"903ea6a1c673b4a6e93f6991f6e041be6a56a8c1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":313,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        # need to copy keys, because the dict is modified in the loop body"},{"line_number":316,"context_line":"        for uuid in list(self.claims):"},{"line_number":317,"context_line":"            if uuid not in existed:"},{"line_number":318,"context_line":"                devs \u003d self.claims.pop(uuid, [])"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c2d03c56","line":315,"updated":"2016-07-28 18:42:59.000000000","message":"nit: I don\u0027t think this comment is mandatory because of the same of other part of this patch. but that is nit, I am fine to go forward with that.","commit_id":"a24f5b3eb3f8b6dcd2936f88b3fe863c7382b0b2"}],"nova/pci/stats.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"bdb68dee0c3eacd960567515ade864f90431f21a","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        self.pools \u003d []"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def __eq__(self, other):"},{"line_number":305,"context_line":"        # Note(lbeliveau): Only used in tox unit tests.  Should make it"},{"line_number":306,"context_line":"        # more robust and fully compare the dictionnaries, not just the"},{"line_number":307,"context_line":"        # size."},{"line_number":308,"context_line":"        return len(self.pools) \u003d\u003d len(other.pools)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def __ne__(self, other):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e83a8e97","line":307,"range":{"start_line":305,"start_character":8,"end_line":307,"end_character":15},"updated":"2016-05-08 15:47:39.000000000","message":"I don\u0027t think you comment is true this was done to prevent pci pool resource update every time \nsee https://github.com/openstack/nova/commit/0efc217ba00f49e4d51bafed54d483007a4d51c5 and \nhttps://bugs.launchpad.net/nova/+bug/1436986\nyou need to check the inner content as well","commit_id":"afeb92dda6005049ba09bb50ab570809af5365da"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"00f32c92f91463e9f2d20a32ef054000e8784e40","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        self.pools \u003d []"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def __eq__(self, other):"},{"line_number":305,"context_line":"        # Note(lbeliveau): Only used in tox unit tests.  Should make it"},{"line_number":306,"context_line":"        # more robust and fully compare the dictionnaries, not just the"},{"line_number":307,"context_line":"        # size."},{"line_number":308,"context_line":"        return len(self.pools) \u003d\u003d len(other.pools)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def __ne__(self, other):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_793bfb9c","line":307,"range":{"start_line":305,"start_character":8,"end_line":307,"end_character":15},"in_reply_to":"dab17558_e83a8e97","updated":"2016-05-09 14:57:08.000000000","message":"Done","commit_id":"afeb92dda6005049ba09bb50ab570809af5365da"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"8e52d2b1eb1c290f1c4958e49f68ee12620d40f1","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    def __eq__(self, other):"},{"line_number":299,"context_line":"        return self.pools \u003d\u003d other.pools"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def __ne__(self, other):"},{"line_number":302,"context_line":"        return not (self \u003d\u003d other)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def to_device_pools_obj(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_1eb35299","line":301,"updated":"2016-06-30 15:27:39.000000000","message":"You might only define this method on Python 2, since the default implementation of __ne__() is already \"not (self \u003d\u003d other)\".\n\nSee my abandonned change:\nhttps://review.openstack.org/#/c/332791/6/nova/pci/stats.py","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"850a65b87ec15867a182aeb5979106739c049521","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    def __eq__(self, other):"},{"line_number":299,"context_line":"        return self.pools \u003d\u003d other.pools"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def __ne__(self, other):"},{"line_number":302,"context_line":"        return not (self \u003d\u003d other)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def to_device_pools_obj(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_b60e3832","line":301,"in_reply_to":"3aaa91ec_1eb35299","updated":"2016-07-04 14:22:28.000000000","message":"Done","commit_id":"98470179a243bcee0fa4fa6465c98a79d8fd69fb"}],"nova/tests/unit/pci/test_manager.py":[{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"360b6035bfd79fa2e31d05cd2d61db7a9e482d09","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 3)"},{"line_number":130,"context_line":"        free_devs \u003d self.tracker.pci_stats.get_free_devs()"},{"line_number":131,"context_line":"        self.assertEqual(len(free_devs), 3)"},{"line_number":132,"context_line":"        self.assertEqual(list(self.tracker.stale.keys()), [])"},{"line_number":133,"context_line":"        self.assertEqual(len(self.tracker.stats.pools), 3)"},{"line_number":134,"context_line":"        self.assertEqual(self.tracker.node_id, 1)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_cbbfff5e","line":132,"range":{"start_line":132,"start_character":48,"end_line":132,"end_character":55},"updated":"2016-06-09 15:37:10.000000000","message":"ditto","commit_id":"beaecc74743c9ceb4a3ae2931bf99248d880a0af"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"fd4b20cf1a5ba64498fb9b08a64a6b98d37b12e1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 3)"},{"line_number":130,"context_line":"        free_devs \u003d self.tracker.pci_stats.get_free_devs()"},{"line_number":131,"context_line":"        self.assertEqual(len(free_devs), 3)"},{"line_number":132,"context_line":"        self.assertEqual(list(self.tracker.stale.keys()), [])"},{"line_number":133,"context_line":"        self.assertEqual(len(self.tracker.stats.pools), 3)"},{"line_number":134,"context_line":"        self.assertEqual(self.tracker.node_id, 1)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_27ad0489","line":132,"range":{"start_line":132,"start_character":48,"end_line":132,"end_character":55},"in_reply_to":"7aa08908_cbbfff5e","updated":"2016-06-09 20:39:20.000000000","message":"Done","commit_id":"beaecc74743c9ceb4a3ae2931bf99248d880a0af"}]}
